Python语法
Python基础
数据类型和变量
- python没有 || && 等,用and, or, not
字符串和编码
ASCII(仅英文) ,Unicode(所有语言编码,但是耗一倍空间) ,UTF-8 (前两者折中,可变长编码,建议使用)
ord()
函数获取字符的整数表示 ,chr()
函数把编码转换为对应的字符>>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文'
要计算
str
包含多少个字符,可以用len()
函数:>>> len('ABC') 3 >>> len('中文') 2
%
运算符就是用来格式化字符串的print('%2d-%02d' % (3, 1)) print('%.2f' % 3.1415926)
另一种格式化字符串的方法是使用字符串的
format()
方法,它会用传入的参数依次替换字符串内的占位符{0}
、{1}
……>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 'Hello, 小明, 成绩提升了 17.1%'
列表list和元组tuple
用
len()
函数可以获得list元素的个数>>> len(classmates) 3
还可以用
-1
做索引,直接获取最后一个元素:>>> classmates[-1] 'Tracy'
以此类推,可以获取倒数第2个、倒数第3个:
>>> classmates[-2] 'Bob' >>> classmates[-3] 'Michael' >>> classmates[-4]
list是一个可变的有序表,所以,可以往list中追加元素到末尾:
>>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam']
也可以把元素插入到指定的位置,比如索引号为
1
的位置:>>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
要删除list末尾的元素,用
pop()
方法:扫描二维码关注公众号,回复: 2892815 查看本文章>>> classmates.pop() 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy']
要删除指定位置的元素,用
pop(i)
方法,其中i
是索引位置:>>> classmates.pop(1) 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy']
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> classmates[1] = 'Sarah' >>> classmates ['Michael', 'Sarah', 'Tracy']
tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改
classmates = ('Michael', 'Bob', 'Tracy')
只有1个元素的tuple定义时必须加一个逗号
,
,来消除歧义:>>> t = (1,) >>> t (1,)
条件判断
if,else后需要加冒号
if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid')
Python提供了
int()
函数来把str
转换成整数s = input('birth: ') birth = int(s)
循环
for循环
names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name)
Python提供一个
range()
函数,可以生成一个整数序列,再通过list()
函数可以转换为list。比如range(5)
生成的序列是从0开始小于5的整数:>>> list(range(5)) [0, 1, 2, 3, 4]
range(101)
就可以生成0-100的整数序列,计算如下:sum = 0 for x in range(101): sum = sum + x print(sum)
while循环,不加括号,加冒号
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)
字典dict和集合set
dict
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
>>> d['Adam'] = 67 >>> d['Adam'] 67
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
>>> d['Jack'] = 90 >>> d['Jack'] 90 >>> d['Jack'] = 88 >>> d['Jack'] 88
通过
in
判断key是否存在:>>> 'Thomas' in d False
通过dict提供的
get()
方法,如果key不存在,可以返回None
,或者自己指定的value:>>> d.get('Thomas') >>> d.get('Thomas', -1) -1
删除一个key,用
pop(key)
方法,对应的value也会从dict中删除:>>> d.pop('Bob') 75 >>> d {'Michael': 95, 'Tracy': 85}
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
集合set:set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
>>> s = set([1, 2, 3]) >>> s {1, 2, 3}
通过
add(key)
方法可以添加元素到set中,可以重复添加,但不会有效果:>>> s.add(4) >>> s {1, 2, 3, 4} >>> s.add(4) >>> s {1, 2, 3, 4}
通过
remove(key)
方法可以删除元素:>>> s.remove(4) >>> s {1, 2, 3}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s1 & s2 {2, 3} >>> s1 | s2 {1, 2, 3, 4}
函数
调用函数
ython内置的常用函数还包括数据类型转换函数,比如
int()
函数可以把其他数据类型转换为整数:>>> int('123') 123 >>> int(12.34) 12 >>> float('12.34') 12.34 >>> str(1.23) '1.23' >>> str(100) '100' >>> bool(1) True >>> bool('') False
定义函数
空函数如果想定义一个什么事也不做的空函数,可以用
pass
语句:def nop(): pass
pass
语句什么都不做,那有什么用?实际上pass
可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。pass
还可以用在其他语句里,比如:if age >= 18: pass
缺少了
pass
,代码运行就会有语法错误。数据类型检查可以用内置函数
isinstance()
实现:def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
函数的参数
必选参数在前,默认参数在后
可变参数:
要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:
def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
但是调用的时候,需要先组装出一个list或tuple:
>>> calc([1, 2, 3]) 14 >>> calc((1, 3, 5, 7)) 84
如果利用可变参数,调用函数的方式可以简化成这样:
>>> calc(1, 2, 3) 14 >>> calc(1, 3, 5, 7) 84
所以,我们把函数的参数改为可变参数:
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
*nums
表示把nums
这个list的所有元素作为可变参数传进去。如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:
>>> nums = [1, 2, 3] >>> calc(nums[0], nums[1], nums[2]) 14
这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个
*
号,把list或tuple的元素变成可变参数传进去:>>> nums = [1, 2, 3] >>> calc(*nums) 14
*nums
表示把nums
这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。
有毒命名关键字参数
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收
city
和job
作为关键字参数。这种方式定义的函数如下:def person(name, age, *, city, job): print(name, age, city, job)
和关键字参数
**kw
不同,命名关键字参数需要一个特殊分隔符*
,*
后面的参数被视为命名关键字参数。