1. Which way among them is used to create an event loop ?
Window.mainloop()
2. 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.
3. 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即可解决。
4. 函数参数* 与 **
python函数参数前面单星号(*)和双星号(**)的区别
在python的函数中经常能看到输入的参数前面有一个或者两个星号:例如
def foo(param1, *param2):
def bar(param1, **param2):
这两种用法其实都是用来将任意个数的参数导入到python函数中。
单星号(*):*agrs
将所以参数以元组(tuple)的形式导入:
例如:
>>> def foo(param1, *param2):print param1print param2
>>> foo(1,2,3,4,5)
1
(2, 3, 4, 5)
双星号(**):**kwargs
将参数以字典的形式导入
>>> def bar(param1, **param2):print param1print 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 aprint bprint argsprint kwargs
>>> foo(1, 2, 3, 4, e=5, f=6, g=7)
1
2
3 4
{'e': 5, 'g': 7, 'f': 6}