Python学习笔记(2)
**python**
?
条件表达式
python使用缩进作为其语言的分组方法
如果缩进不统一,程序报错
if 1 > 2:
? ?print("ok")
? ?print("ok")
? ?print("xx")
print("no")
==> no
if 1 > 2:
? ?print("ok")
? ?print("ok")
? print("xx")
print("no")
==> IndentationError: unindent does not match any outer indentation level
x = 99
if x > 90:
? ? print("A")
elif x > 80:
? ? print("B")
elif x > 70:
? ? print("C")
else:
? ? print("D")
?
取反,用not,不能用!
if not 0
? ? print("OK")
?
循环遍历:
for i in range(10):
? ? print("hello ,world")
for i in [1,3,4,5,5]:
? ? print(i)
?
for i in range(1,10):
? ? print(i)
==> 1,2,3..10
for i in range(1, 10, 2):
? ? print(i)
==> 1,3,5,7,9
?
列表的遍历:
?
d = {2:333, 4:444, 5:666}
for k,v in d.items():
? ? print(k)
? ? print(v)
else:
? ? print("ending")
结果==>
2
333
4
444
5
666
ending
-------------------------------
比较特殊的,python中for循环可以接else,当循环正常执行完毕后
执行else中的语句,如果循环中断,则不会执行else的语句
d = {1:333, 2:444, 3:666, 4: 444, 5: 777}
for k,v in d.items():
? ? if k == 2:
? ? ? ? break
? ? else:
? ? ? ? print(k)
? ? ? ? print(v)
else:
? ? print("ending")
结果==>?
1
333
?
pass 代码桩,什么也不做
continue 继续
exit() 退出程序
---------------------------------------
d = {1:333, 2:444, 3:666, 4: 444, 5: 777}
for k,v in d.items():
? ? if k == 3:
? ? ? ? break
? ? if k == 2:
? ? ? ? pass
? ? ? ? continue
? ? if k == 5:
? ? ? ? exit()
? ? else:
? ? ? ? print(k)
? ? ? ? print(v)
else:
? ? print("ending")
?
while 循环:
--------------------------------------------
$ cat while.py
当while条件为false时,才会执行else中的语句
x = ""
while x != "q":
? ?print("hello")
? ?x = input("input something, q for quit: ")
? ?if not x :
? ? ? ?break
else:
? ?print("ending")
?
函数:
------------------------------
?
a = 2
b = 3
def add():
? ? c=a+b
? ? print(c)
?
add()
==> 5
这个有点不安全吧,要是函数体中得变量不小心和函数外的变量重名,那不是麻烦了?
?
def new_add(x, y):
? ? z = x + y
? ? print(z)
?
add()
new_add(3,4)
?
传参
----------------------------------
def add(x = 3, y = 4):
? ? c = x + y
? ? print(c)
?
add()
add(y = 5) #可以单独传参,但是如果x没有默认值就不行了
?
?
?
全局变量
-------------------------
$ cat global.py
x = "global var"
?
def change():
? ? x = 100
?
print(x)
==> "global var"
?
------------------------------
$ cat global.py
x = "global var"
?
def change():
? ? global x
? ? x = 100
?
change() #执行了change()方法以后,global x ,相当于给x重新赋值了
print(x)
==> 100
?
?
元组作为参数
-------------------------
$ cat function1.py
?
def add(x, y):
? ? ? ? print("%s : %s" % (x,y))
?
add("hello", "world")
?
a = ("hello", "world")
b = ("hello", "pthon", "world")
?
?
add(a) ?#错误,a作为一个整体传给了x,报参数错误
add(*a) #正确, 当元组元素的个数于函数参数的个数相同的时候,则x=a[0], y=a[1]
add(*b) #错误, 当元组元素的个数不等于函数参数的个数时,报参数错误
add(y="world", x="hello") #正确,可以指定参数传值,也就是说顺序没有关系
?
字典作为参数
-------------------------------------
def add(x, y):
? ? ? ? print("%s : %s" % (x,y))
?
?
d={"y":"world", "x":"hello"}
d1={"y":"world", "x":"hello", "z": "python"}
add(**d) #正确输出==> hello, world
add(**d1) #错误,add() got an unexpected keyword argument 'z'
?
?
接受多余参数?
------------------------------------------------------
*args(剩余的参数作为元组), **args(剩余的参数作为字典)
?
$ cat function2.py
?
def p(x, *args):
? ? ? ? print(x)
? ? ? ? print(args)
?
p(1)
p(1,2,3)
==>1
==>()
==>1
==>(2, 3)
p(x=1,y=3)
==> p() got an unexpected keyword argument 'y'
y=3不能作为多余参数保存在args中,可以用**args来保存
-----------------------------------------------------
$ cat function2.py
?
def p(x,**args):
? ? ? ? print(x)
? ? ? ? print(args)
?
p(1)
p(x=2,y=4)
==>1
==>{}
==>2
==>{'y': 4}
?
p(1,x=3) #错误,第一个参数付给了x,那么相当于穿了x=1,x=3
==>p() got multiple values for argument 'x'
?
同时接受*args, **args的情况
------------------------------------------------------
def p(x,*args,**other_args):
? ? ? ? print(x)
? ? ? ? print(args)
? ? ? ? print(other_args)
?
p(1)
==>1
==>()
==>{}
p(3,3,z=5)
==>3
==>(3,)
==>{"z":5}
参数的顺序不能变
p(y=3,3,5) #错误,SyntaxError: non-keyword arg after keyword arg
p(3,4,y=4,5) #错误,SyntaxError: non-keyword arg after keyword arg
?
lambda表达式
----------------------------------
lambda函数是一种快速定义单行的最小函数, 从lisp借用而来,可以用在任何
需要函数的地方
?
g = lambda x,y: x+y
g(1,2) ==> 3
?
lambda的好处:
1.写一些执行脚本,省去函数的定义过程,让代码更简洁
2.省去抽象函数命名的问题
3.让代码更容易理解(sometime)
?
?
swtich, python中没有swtich,可以使用字典来实现switch
------------------------------------------------------
x=1
y=4
dd = {
? "+": x+y,
? "-": x-y
}
print(dd)
print(dd.get("+"))
print(dd.get("-"))
?
?
内置函数
----------------------------------------------------
查看文档:
help(str.replace)
?
str.capilize()
str.split()
str.replace()
?
?
异常处理
--------------------------------------------
?
contents = {"tomato":4, "banana":3}
try:
? if contents["apple"] > 3:
? ? print("i have apples")
except (KeyError) as error:
? print("i have no %s" % error)
?
==> i have no 'apple'
?
?
?
?
?
?
? ? ? ?
?
?
?
?