Python内置的一种数据类型是列表:list。
list是一种有序的集合,可以随时添加和删除其中的元素。
list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。
构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。
方法:
1.append()总是把新的元素添加到 list 的尾部。
2.list的 insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素:
#L.insert(0, 'Paul') 的意思是,'Paul'将被添加到索引为 0 的位置上(也就是第一个),而原来索引为 0 的Adam同学,以及后面的所有同学,都自动向后移动一位。
3.pop()方法总是删掉list的最后一个元素,并且它还返回这个元素。
tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
创建tuple和创建list唯一不同之处是用( )替代了[ ]。
因为()既可以表示tuple,又可以作为括号表示运算时的优先级
正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”
收索:idle
append(123):将append里面的东西,加入到已经定义的数组member中的最后一个
member.append(123)
extend([ 123,456 ]):将extend里面的数组,加入到已经定义的数组member中的最后两个
member.extend([1,2])
insert(位置,数据):将intsert里面的数据,加入到已经定义的数组member里面,前面的数字代表是在数组中的第几个,后面代表插入到数组中的元素
member.insert(0,456)
remove(123):将remove里面的元素,删除在已定义的数组member里面的元素123
member.remove(123)
del(位置):删除已定义的数组remember里面的元素,位置为0,1,2,3,4,5,6.。。。。。
del member[1]
pop(位置):同del一样
member.pop(1)
member[1,2,3,4,5,6,7,8]
冒号的用法:member[1:3] 输出为[2,3] 输出的个数为3—1=2
member[:2] 输出[1,2] member[5:] 输出[6,7,8]
member[:] 输出member[1,2,3,4,5,6,7,8] 相当于对member列表进行拷贝
数组可以自行比较大小
List1=[123] list2[456] list1>list2 输出flase
如何列表里面是多个进行比较,仅仅比较第一个,当第一个正确,则整个列表正确
List 可以进行加减乘除操作,但是毕竟是同一种类型
In 和 not in 对列表里面的元素进行判断返回flase或者true
dir(list):python中list的内置函数 dir(tuple);python中tuple中的内置函数
list.count(元素):返回元素在list中出现的次数
list.index(元素,位置,位置):返回元素在list中出现的次数
list.sort():将list中元素从小到大排序
list.sort(reverse=True):将list中元素从大到小排序
元祖:tuple
元祖里面的元素不能进行修改列表 元祖的标志是逗号和()
8*(8,)
输出(8,8,8,8,8,8,8,8t)
利用切片的方法删除和插入元素到元祖当中必须同一种类型
逻辑操作符,加减乘除,比较操作符
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
if条件语句:
if 90<=score<=100 :
print(“A”)
else:
print(“B”)
if 90<=score<=100:
elif 0<=score<=90:
or=|| and=&&
三元操作符 x if 条件 else y
条件为true 赋值前者
反则 赋值后者
断言(assert)
EX: assert 3>4
程序自动崩溃抛出AssertionError的异常
当程序需要确保程序中的某个条件一定为真才能让程序正常工作的话,就需要用到assert关键字
注意: if 语句后接表达式,然后用:表示代码块开始。
如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:
if和else 后面都有一个个“:”。
elif 意思就是 else if
特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。
While循环
While 条件;
循环体
For循环
For 目标 in 表达式:
循环体
Range()
Range([strat,]stop[,step=1])
1.[][]两个括号里面的参数是可选的
2.Step=1表示第三个参数的默认值为1
3.Range这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字顺序
Ex:
Range(5) input 0 1 2 3 4
Range(1,5) input 1,2,3,4,
Range(1,10,2) input 1,3,5,7,9
1到10输出 间隔为2
注意:range函数返回一个左闭右开([left,right))的序列数
Break和continue语句同C语言
算术运算符
运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
比较运算符
运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
<> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 true。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。
赋值运算符
运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
位运算符
运算符 描述 实例
& 按位与运算符: 参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
| 按位或运算符: 只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 61 ,二进制解释: 0011 1101
^ 按位异或运算符: 当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~ 按位取反运算符: 对数据的每个二进制位取反,即把1变为0,把0变为1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<< 左移动运算符: 运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000
>> 右移动运算符: 把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释: 0000 1111
逻辑运算符
运算符 逻辑表达式 描述 实例
and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False
成员运算符
运算符 描述 实例
in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
身份运算符
身份运算符用于比较两个对象的存储单元
运算符 描述 实例
is is是判断两个标识符是不是引用自一个对象 x is y, 如果 id(x) 等于 id(y) , is 返回结果 1
is not is not是判断两个标识符是不是引用自不同对象 x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1
运算符优先级
运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符
Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
由于dict也是集合,len() 函数可以计算任意集合的大小:
>>> len(d)
3
注意: 一个 key-value 算一个,因此,dict大小为3。
list 必须使用索引返回对应的元素,而dict使用key:
>>> print d['Adam']
95
>>> print d['Paul']
Traceback (most recent call last):
File "index.py", line 11, in <module>
print d['Paul']
KeyError: 'Paul'
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d:
print d['Paul']
如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart')
59
>>> print d.get('Paul')
None
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。
dict的第二个特点就是存储的key-value序对是没有顺序的!
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
>>> s = set(['A', 'B', 'C'])
可以查看 set 的内容:
>>> print s
set(['A', 'C', 'B'])
请注意,上述打印的形式类似 list, 但它不是 list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
最后,set存储的元素也是没有顺序的。
由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除。
添加元素时,用set的add()方法:
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])
如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:
>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])
删除set中的元素时,用set的remove()方法:
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])
如果删除的元素不存在set中,remove()会报错:
>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4
所以用add()可以直接添加,而remove()前需要判断。
也可以在交互式命令行通过 help(abs) 查看abs函数的帮助信息。
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
函数的定义和调用
def Myfirstfunction(参数):
定义函数的内容
函数的调用
Myfirstfunction(具体数值)
可以定义任意数量的参数,尽量不要太多
函数文档
‘ dsfsafasfasfas ’
函数文档的调用
._doc_
局部变量和全局变量
在函数中使用
Input的使用方法
Y=input(“输入你想要输入的数值”)
Int(y)
Sum(y)
内嵌(内部)函数
闭包()
Nonlocal count
匿名函数
Def sum(x)
Return x*2+1
Lambda x:2*x+1
G=lambda(5)
G=11
# math包提供了sin()和 cos()函数,我们先用import引用它:
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
这样我们就可以同时获得返回值:
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
151.961524227 70.0
但其实这只是一种假象,Python函数返回的仍然是单一值:
>>> r = move(100, 100, 60, math.pi / 6)
>>> print r
(151.96152422706632, 70.0)
用print打印返回结果,原来返回值是一个tuple!
但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
汉诺塔问题
def hanoi(n,x,y,z):
if n==1:
print(x,"->",z)
else:
hanoi(n-1,x,z,y)#把前n-1个从X移到Y
print(x,"->",z)#把第n个由X移到Z
hanoi(n-1,y,x,z)#把前n-1个从Y移到Z
n=int(input("输入汉罗塔层数"))
hanoi(n,"a","b","c")
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数:
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
只用一个 : ,表示从头到尾:
因此,L[:]实际上复制出了一个新list。
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
函数values()是将dict中的value列举出来
函数items()是将dict中的key和value同时列举出来
print() 可以同时输出多个返回值
例如print(a,b,c........)
list是一种有序的集合,可以随时添加和删除其中的元素。
list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。
构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。
方法:
1.append()总是把新的元素添加到 list 的尾部。
2.list的 insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素:
#L.insert(0, 'Paul') 的意思是,'Paul'将被添加到索引为 0 的位置上(也就是第一个),而原来索引为 0 的Adam同学,以及后面的所有同学,都自动向后移动一位。
3.pop()方法总是删掉list的最后一个元素,并且它还返回这个元素。
tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
创建tuple和创建list唯一不同之处是用( )替代了[ ]。
因为()既可以表示tuple,又可以作为括号表示运算时的优先级
正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”
收索:idle
append(123):将append里面的东西,加入到已经定义的数组member中的最后一个
member.append(123)
extend([ 123,456 ]):将extend里面的数组,加入到已经定义的数组member中的最后两个
member.extend([1,2])
insert(位置,数据):将intsert里面的数据,加入到已经定义的数组member里面,前面的数字代表是在数组中的第几个,后面代表插入到数组中的元素
member.insert(0,456)
remove(123):将remove里面的元素,删除在已定义的数组member里面的元素123
member.remove(123)
del(位置):删除已定义的数组remember里面的元素,位置为0,1,2,3,4,5,6.。。。。。
del member[1]
pop(位置):同del一样
member.pop(1)
member[1,2,3,4,5,6,7,8]
冒号的用法:member[1:3] 输出为[2,3] 输出的个数为3—1=2
member[:2] 输出[1,2] member[5:] 输出[6,7,8]
member[:] 输出member[1,2,3,4,5,6,7,8] 相当于对member列表进行拷贝
数组可以自行比较大小
List1=[123] list2[456] list1>list2 输出flase
如何列表里面是多个进行比较,仅仅比较第一个,当第一个正确,则整个列表正确
List 可以进行加减乘除操作,但是毕竟是同一种类型
In 和 not in 对列表里面的元素进行判断返回flase或者true
dir(list):python中list的内置函数 dir(tuple);python中tuple中的内置函数
list.count(元素):返回元素在list中出现的次数
list.index(元素,位置,位置):返回元素在list中出现的次数
list.sort():将list中元素从小到大排序
list.sort(reverse=True):将list中元素从大到小排序
元祖:tuple
元祖里面的元素不能进行修改列表 元祖的标志是逗号和()
8*(8,)
输出(8,8,8,8,8,8,8,8t)
利用切片的方法删除和插入元素到元祖当中必须同一种类型
逻辑操作符,加减乘除,比较操作符
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
if条件语句:
if 90<=score<=100 :
print(“A”)
else:
print(“B”)
if 90<=score<=100:
elif 0<=score<=90:
or=|| and=&&
三元操作符 x if 条件 else y
条件为true 赋值前者
反则 赋值后者
断言(assert)
EX: assert 3>4
程序自动崩溃抛出AssertionError的异常
当程序需要确保程序中的某个条件一定为真才能让程序正常工作的话,就需要用到assert关键字
注意: if 语句后接表达式,然后用:表示代码块开始。
如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:
if和else 后面都有一个个“:”。
elif 意思就是 else if
特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。
While循环
While 条件;
循环体
For循环
For 目标 in 表达式:
循环体
Range()
Range([strat,]stop[,step=1])
1.[][]两个括号里面的参数是可选的
2.Step=1表示第三个参数的默认值为1
3.Range这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字顺序
Ex:
Range(5) input 0 1 2 3 4
Range(1,5) input 1,2,3,4,
Range(1,10,2) input 1,3,5,7,9
1到10输出 间隔为2
注意:range函数返回一个左闭右开([left,right))的序列数
Break和continue语句同C语言
算术运算符
运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
比较运算符
运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
<> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 true。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。
赋值运算符
运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
位运算符
运算符 描述 实例
& 按位与运算符: 参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
| 按位或运算符: 只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 61 ,二进制解释: 0011 1101
^ 按位异或运算符: 当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~ 按位取反运算符: 对数据的每个二进制位取反,即把1变为0,把0变为1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<< 左移动运算符: 运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000
>> 右移动运算符: 把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释: 0000 1111
逻辑运算符
运算符 逻辑表达式 描述 实例
and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False
成员运算符
运算符 描述 实例
in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
身份运算符
身份运算符用于比较两个对象的存储单元
运算符 描述 实例
is is是判断两个标识符是不是引用自一个对象 x is y, 如果 id(x) 等于 id(y) , is 返回结果 1
is not is not是判断两个标识符是不是引用自不同对象 x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1
运算符优先级
运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符
Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
由于dict也是集合,len() 函数可以计算任意集合的大小:
>>> len(d)
3
注意: 一个 key-value 算一个,因此,dict大小为3。
list 必须使用索引返回对应的元素,而dict使用key:
>>> print d['Adam']
95
>>> print d['Paul']
Traceback (most recent call last):
File "index.py", line 11, in <module>
print d['Paul']
KeyError: 'Paul'
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d:
print d['Paul']
如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart')
59
>>> print d.get('Paul')
None
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。
dict的第二个特点就是存储的key-value序对是没有顺序的!
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
>>> s = set(['A', 'B', 'C'])
可以查看 set 的内容:
>>> print s
set(['A', 'C', 'B'])
请注意,上述打印的形式类似 list, 但它不是 list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
最后,set存储的元素也是没有顺序的。
由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除。
添加元素时,用set的add()方法:
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])
如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:
>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])
删除set中的元素时,用set的remove()方法:
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])
如果删除的元素不存在set中,remove()会报错:
>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4
所以用add()可以直接添加,而remove()前需要判断。
也可以在交互式命令行通过 help(abs) 查看abs函数的帮助信息。
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
函数的定义和调用
def Myfirstfunction(参数):
定义函数的内容
函数的调用
Myfirstfunction(具体数值)
可以定义任意数量的参数,尽量不要太多
函数文档
‘ dsfsafasfasfas ’
函数文档的调用
._doc_
局部变量和全局变量
在函数中使用
Input的使用方法
Y=input(“输入你想要输入的数值”)
Int(y)
Sum(y)
内嵌(内部)函数
闭包()
Nonlocal count
匿名函数
Def sum(x)
Return x*2+1
Lambda x:2*x+1
G=lambda(5)
G=11
# math包提供了sin()和 cos()函数,我们先用import引用它:
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
这样我们就可以同时获得返回值:
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
151.961524227 70.0
但其实这只是一种假象,Python函数返回的仍然是单一值:
>>> r = move(100, 100, 60, math.pi / 6)
>>> print r
(151.96152422706632, 70.0)
用print打印返回结果,原来返回值是一个tuple!
但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
汉诺塔问题
def hanoi(n,x,y,z):
if n==1:
print(x,"->",z)
else:
hanoi(n-1,x,z,y)#把前n-1个从X移到Y
print(x,"->",z)#把第n个由X移到Z
hanoi(n-1,y,x,z)#把前n-1个从Y移到Z
n=int(input("输入汉罗塔层数"))
hanoi(n,"a","b","c")
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数:
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
只用一个 : ,表示从头到尾:
因此,L[:]实际上复制出了一个新list。
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
函数values()是将dict中的value列举出来
函数items()是将dict中的key和value同时列举出来
print() 可以同时输出多个返回值
例如print(a,b,c........)