python知识点杂记

类变量若以单下划线(_)开头,代表不能直接被访问,类似于 C# 的受保护型变量(protected),表示不能通过 import module_name 而导入。
类变量若以双下划(__)开头,表示为类的私有成员,不能被导入和其他类变量访问。
以双下划开头和双下划线结尾的变量是 Python 里的专用标识,有特殊的身份。

del 用于删除可迭代对象中某个元素;
__init__中的内容会在第一次导入包时被执行

 

1、 Python没有 ++, --操作。

2、 Join+快;tuplelist

3、 Dictkey是区分大小写的

4、 参数顺序:无默认值参数,有默认值参数,tuple,dict

5、 通过对ditckey的排序实现dict的排序

6、   不论是可以变的还是不可变的,在函数内赋值给参数是不会影响到调用者

7、   import Phone.Mobile.Analog

Phone.Mobile.Analog.dial(“021-61750808”)

8、   from Phone import Mobile

Mobile.Analog.dial((“021-61750808”)

9、   如果需要预导入一些模块,就需要在__init__.py中编码实现

10、 如想在局部作用域中改变全局作用域的对象,必须使用global关键字

1、 Python函数没有声明和定义的区分

2、 id(obj)函数可用于检索对象的身份,也就是内存中的对象的地址

3、 当字典的value是一个复杂结构体时:

t={}

t.setdefault("aa",[]).append(1)

{'aa': [1]}

4、 seq*expr:序列重复expr次

5、 以单下划线开头(_foo)的代表不能用“from xxx import *”而导入;

以双下划线开头的(__foo)代表类的私有成员;

以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识

1、 将一个序列逆序:t[::-1]

2、 t=[1,2,3]

for id,val in enumerate(t):

print id,val

3、 print "my name is %s,my age is %d"%("aa",18)

4、 把字符串转换为Unicode编码的字符串:

SS=u"大连理工"

print isinstance(SS,unicode)

5、 模拟堆栈:

lst=[]

lst.append()

lst.pop()

模拟队列时:lst.pop(0)

6、 from __future__ import division

整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差

7、 /除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:

还有一种除法是//,称为地板除,两个整数的除法仍然是整数:

取余数%

8、 如果'本身也是一个字符,那就可以用""括起来

9、 如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如

'I\'m \"OK\"!'

10、 Python还允许用r''表示''内部的字符串默认不转义

11、 空值是Python里一个特殊的值,用None表示

12、 变量本身类型不固定的语言称之为动态语言(python是动态语言),与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错

13、 Python的整数没有大小限制;Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。

14、 Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码

15、 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

16、 在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言

Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符>>> ord('中')

20013

>>> chr(66)

'B'

17、 当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

18、 #!/usr/bin/env python3

19、 # -*- coding: utf-8 -*-

20、 申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码(用nodepad可以查看编码格式)

21、

>>> 'growth rate: %d %%' % 7

'growth rate: 7 %'

22、 tuple和list非常类似,但是tuple一旦初始化就不能修改

23、 不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple

24、 input()返回的数据类型是str

从1写到100有点困难,幸好Python提供一个range()函数,可以生成一个整数序列>>> list(range(5))

[0, 1, 2, 3, 4]

25、 list越大,查找越慢。字典的查找速度不会随着字典大小的增加而变慢。

26、 dict内部存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有以下几个特点:

查找和插入的速度极快,不会随着key的增加而变慢;

需要占用大量的内存,内存浪费多。

而list相反:

查找和插入的时间随着元素的增加而增加;

占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法

27、 因为dict根据key来计算value的存储位置,所以key不能变,在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。(通过key计算位置的算法称为哈希算法)

28、 无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”,所以set中不可放入可变对象

29、 set中,没有重复的key。

30、 set和dict相似,list和tuple相似

31、 函数可以同时返回多个值,但其实就是一个tuple。

32、 当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll('Adam', 'M', city='Tianjin'),

33、 设置默认参数时:必选参数在前,默认参数在后

34、 默认参数要牢记一点:默认参数必须指向不变对象!下面是个反例

35、 def add_end(L=[]):

36、 L.append('END')

37、 return L

38、 >>> add_end()

39、 ['END']

40、 >>> add_end()

41、 ['END', 'END']

42、 应该修改为如下:

43、 def add_end(L=None):

44、 if L is None:

45、 L = []

46、 L.append('END')

47、 return L

48、 常用不变对象:数值,字符串,NONE,tuple;可变对象:list、dict

49、 python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

50、 定义参数个数可变的函数:在参数前面加了一个*号,在函数内部,参数numbers接收到的是一个tuple

51、 def calc(*numbers):

52、 sum = 0

53、 for n in numbers:

54、 sum = sum + n * n

55、 return sum

posted on 2017-05-07 15:36  我和你并没有不同  阅读(253)  评论(0编辑  收藏  举报