python 自我检测题--part 1

  1. Which way among them is used to create an event loop ?

Window.mainloop()

  1. Suppose we have a set a = {10,9,8,7}, and we execute a.remove(14) what will happen ?

Key error is raised.

The remove() method removes the specified element from the set.

This method is different from the discard() method, because the remove() method will raise an error if the specified item does not exist, and the discard() method will not.

  1. What is output of following −

print('any'.encode())

b'any'

二、encode、decode

字符串的编码解码第一次接触是在 socket编程,socket 套接字传输的必须是字节串,其实Bytes才是计算机里真正的数据类型,也是网络数据传输中唯一的数据格式,什么Json,Xml这些格式的字符串最后想传输也都得转成Bytes的数据类型才能通过socket进行传输,而Bytes的数据与字符串类型数据的转换就是编码与解码的转换,utf-8是编解码时指定的格式。所以在 发送数据时候做了一步 字符串编码 str.encode('utf-8') ,编码格式选的 utf-8,这样就把字符串变成了字节串。【在python3 时候的操作】

在 接收端,接收到的数据需要转码,rev.decode('utf-8') ,编解码的格式可以自己选择。

这里存在一个数据传输隐患。当传输的数据超过一次性最大接收量,或者多次传输,那数据流被分割为多个部分,那么我们就不知道某个字符是否由于位于分割边界而从中间被分开。此时对部分接受的信息进行解码是很危险的。比如中文,在编码后是多字节的形式。编码方式主要分为两大类,单字节编码和多字节编码,前者即每个字符与字节的值唯一对应,后者中每个字符可能会用多个字节来表示。由于在一些多字节编码方式中,用于表示不同字符的字节数是不同的,因此操作起来要多加小心。

三、序列化、反序列化 json

不同的编程语言有一个共同的数据类型---字符串类型。

所以要实现不同的编程语言之间对象的传递,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。

json的dumps方法和loads方法,可实现数据的序列化和反序列化。具体来说,dumps方法,可将json格式数据序列为Python的相关的数据类型;loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求。在序列化时,中文汉字总是被转换为unicode码,在dumps函数中添加参数ensure_ascii=False即可解决。

  1. 函数参数* 与 **

python函数参数前面单星号(*)和双星号(**)的区别

在python的函数中经常能看到输入的参数前面有一个或者两个星号:例如

def foo(param1, *param2):
def bar(param1, **param2):

这两种用法其实都是用来将任意个数的参数导入到python函数中。

单星号(*):*agrs

将所以参数以元组(tuple) 的形式导入:

例如:

>>> def foo(param1, *param2):
        print param1
        print param2
>>> foo(1,2,3,4,5)
1
(2, 3, 4, 5)

双星号(**):**kwargs

将参数以字典的形式导入

>>> def bar(param1, **param2):
        print param1
        print param2
>>> bar(1,a=2,b=3)
1
{'a': 2, 'b': 3}

此外,单星号的另一个用法是解压参数列表:

>>> def foo(bar, lee):
        print bar, lee
>>> l = [1, 2]
>>> foo(*l)
1 2

当然这两个用法可以同时出现在一个函数中:例如

>>> def foo(a, b=10, *args, **kwargs):
        print a
        print b
        print args
        print kwargs
>>> foo(1, 2, 3, 4, e=5, f=6, g=7)
1
2
3 4
{'e': 5, 'g': 7, 'f': 6}
相关推荐
GISer_Jing2 分钟前
前端面试题合集(一)——HTML/CSS/Javascript/ES6
前端·javascript·html
m0_7482540911 分钟前
100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python
小爬虫程序猿17 分钟前
深入理解Jsoup与Selenium:Java爬虫的双剑合璧
爬虫·python·selenium
随便写写20 分钟前
Pyside6 基础框架以及三种基础控件
python
夏娃同学32 分钟前
基于Flask后端框架的均值填充
python·flask
HackKong39 分钟前
Python与黑客技术
网络·python·web安全·网络安全·php
四口鲸鱼爱吃盐43 分钟前
Pytorch | 利用GNP针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python·深度学习·神经网络·计算机视觉
进击的小小学生43 分钟前
多因子模型连载
大数据·python·数据分析·区块链
小码贾44 分钟前
OpenCV-Python实战(6)——图相运算
人工智能·python·opencv
yma161 小时前
windows10下使用沙盒多开uiautoanimation可行性验证
python·uiautoanimation