deffun():global b1
b1 =100print(b1)print("I am fun")
b2 =99print(b2)
fun()print(b1)
100
I am fun
99
100
globals, locals函数
可以通过globals和locals显示出局部变量和全局变量
参看以下案例
# globals 和 locals# globals 和 locals叫做内建函数
a =1
b =2deffun(c,d):
e =111print("Locals={0}".format(locals()))print("Globals={0}".format(globals()))
fun(100,200)
Locals={'c': 100, 'd': 200, 'e': 111}
Globals={'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': <module 'builtins' (built-in)>, '__builtins__': <module 'builtins' (built-in)>, '_ih': ['', 'def fun():\n b1 = 100\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \nprint(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \nprint(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n # b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '# globals 和 locals\na = 1\nb = 2\n\ndef fun(c,d):\n e = 111\n print("Locals={0}".format(locals()))\n print("Globals={0}".format(globals()))\nfun(100,200)'], '_oh': {}, '_dh': ['E:\\python\\jupyter_program'], 'In': ['', 'def fun():\n b1 = 100\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \nprint(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \nprint(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n # b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '# globals 和 locals\na = 1\nb = 2\n\ndef fun(c,d):\n e = 111\n print("Locals={0}".format(locals()))\n print("Globals={0}".format(globals()))\nfun(100,200)'], 'Out': {}, 'get_ipython': <bound method InteractiveShell.get_ipython of <ipykernel.zmqshell.ZMQInteractiveShell object at 0x0000021438109668>>, 'exit': <IPython.core.autocall.ZMQExitAutocall object at 0x000002143A859D30>, 'quit': <IPython.core.autocall.ZMQExitAutocall object at 0x000002143A859D30>, '_': '', '__': '', '___': '', '_i': 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n # b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '_ii': 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '_iii': 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '_i1': 'def fun():\n b1 = 100\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \nprint(b1)\nfun()', 'fun': <function fun at 0x000002143A9F8598>, '_i2': 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \nprint(b1)\nfun()', '_i3': 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '_i4': 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '_i5': 'def fun():\n b1 = 100\n global b1\n print(b1)\n print("I am fun")\n # b2 = 99\n print(b2)\n \n#print(b1)\nfun()', '_i6': '# globals 和 locals\na = 1\nb = 2\n\ndef fun(c,d):\n e = 111\n print("Locals={0}".format(locals()))\n print("Globals={0}".format(globals()))\nfun(100,200)', 'a': 1, 'b': 2}
eval()函数
把一个字符串当成一个表达式来执行,返回表达式执行后的结果
语法 eval(string_code, globals=None,locals=None)
exec()函数
功能类似,不返回结果
语法 exec(string_code, globals=None,locals=None)
x =100
y =200# z = x + y
z1 = x + y
z2 =eval("x+y")print(z2)print(z1)
300
300
x =100
y =200# z = x + y
z1 = x + y
z2 =exec("print('x+y:' , x+y)")print(z1)print(z2)
x+y: 300
300
None
递归函数
函数直接或者间接调用自身
优点:简洁,容易理解
缺点:对递归深度有限制,消耗资源大
python中递归深度有限制,超过限制报错
在写递归程序的时候,一定注意结束条件
# 递归调用深度限制代码
x =0deffun():global x
x +=1print(x)#函数自己调用自己
fun()# 调用函数
fun()
---------------------------------------------------------------------------
RecursionError Traceback (most recent call last)
<ipython-input-11-7586de2e387c> in <module>
8 fun()
9 # 调用函数
---> 10 fun()
<ipython-input-11-7586de2e387c> in fun()
6 print(x)
7 #函数自己调用自己
----> 8 fun()
9 # 调用函数
10 fun()
... last 1 frames repeated, from the frame below ...
<ipython-input-11-7586de2e387c> in fun()
6 print(x)
7 #函数自己调用自己
----> 8 fun()
9 # 调用函数
10 fun()
RecursionError: maximum recursion depth exceeded while calling a Python object
# 斐波那契数列deffib(n):if n ==1:return1if n ==2:return1return fib(n-1)+ fib(n-2)
fib(5)
defhano(n,a,b,c):'''
n代表有几个盘子
a代表第一个盘子
b代表第二个盘子
c代表第三个盘子
'''if n ==1:print(a,"-->",c)returnNoneif n ==2:print(a,"-->",b)print(a,"-->",c)print(b,"-->",c)returnNone# 把n-1个盘子,从a借助于c,移动到b
hano(n-1,a,c,b)print(a,"-->",c)# 把n-1个盘子,从b借助于a,移动到c
hano(n-1,b,a,c)
a ="A"
b ="B"
c ="C"
n =3
hano(n,a,b,c)
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
list(列表)
del: 删除命令
# del 删除列表中的一个元素,在原位置删除
a =[1,2,3,4,5]print(id(a))del a[2]print(id(a))print(a)
1980825909768
1980825909768
[1, 2, 4, 5]
# del 一个变量后不能继续使用此变量
列表相加
使用加号连接两个列表
# 使用加号连接列表
a =[1,2,3,4,5,6]
b =[7,8,9,0]
d =['a','b']
c = a + b + d
print(c)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'a', 'b']
# 使用乘号操作列表# 列表直接和一个整数相乘# 相当于把n个列表连接在一起
a =[1,2,3,4,5,6]
b = a *3print(b)
# 成员资格运算# 就是判断一元素是否在list里面
a =[1,2,3,4,5,6]
b =8
d =1
c= b in a
print(c)print(d in a)
False
True
# not in
a =[1,2,3,4,5,6]
b =9print(b notin a)
True
列表的遍历
for
while
# for i in list
a =[1,2,3,4,5,6]for i in a:print(i)
1
2
3
4
5
6
b =["I Love Lilingling"]for i in b:print(i)
I Love Lilingling
# while访问list# 一般不用while访问list
a =[1,2,3,4,4,5,6,7,7]
length =len(a)#index表示的是list的下标
index =0while index < length:print(a[index])
index +=1
1
2
3
4
4
5
6
7
7
# 双层列表循环# a 为嵌套列表,或者叫双层列表
a =[["one",1],["two",2],["three",3]]for k,v in a:print(k,"--",v)
one -- 1
two -- 2
three -- 3
# 双层列表循环变异# a 为嵌套列表,或者叫双层列表
a =[["one",1,"sdds"],["two",2],["three",3,4,5,6]]for k,v in a:print(k,"--",v)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-39-5be6077ce179> in <module>
6
7 a = [["one",1,"sdds"],["two",2],["three",3,4,5,6]]
----> 8 for k,v in a:
9
10 print(k,"--",v)
ValueError: too many values to unpack (expected 2)
# 双层列表循环变异# a 为嵌套列表,或者叫双层列表
a =[["one",1,"sdds"],["two",2,"dsdds"],["three",3,"assaas"]]for k,v,w in a:print(k,"--",v,"--",w)
one -- 1 -- sdds
two -- 2 -- dsdds
three -- 3 -- assaas
列表内涵: list content
通过简单方法创建列表
# for 创建
a =['a','b','c']#用list a创建一个 list b#下面代码的含义是,对于所有a中的元素,逐个放入新列表b中
b =[i for i in a]print(b)
['a', 'b', 'c']
# 对a中所有的元素乘以10,生成一个新的list
a =[1,2,3,4,5]#用list a创建一个 list b#下面代码的含义是,对于所有a中的元素,逐个放入新列表b中
b =[i*10for i in a]print(b)
[10, 20, 30, 40, 50]
# 还可以过滤原来list中的内容并放入新列表中# 比如原有列表a, 需要把所有a中的偶数生成新的列表b
a =[x for x inrange(1,35)]
b =[m for m in a if m %2==0]print(b)
# 列表生成式可以嵌套# 由两个列表a,b
a =[i for i inrange(1,4)]print(a)
b =[i for i inrange(100,400)if i %100==0]print(b)
c =[m+n for m in a for n in b]print(c)# 和上面等价for m in a:for n in b:print(m+n,end =" ")print()# 嵌套的列表生成式也可以用条件表达式
c =[m+n for m in a for n in b if m+n <250]print(c)
l =['a',"I Love Lilingling",23,45,675]#追加:在队尾插入数据 appendprint(l)
l.append(100)print(l)#指定位置插入 insert(index,date)
l.insert(3,"dhsudh")print(l)# 删除# del删除# pop,从队尾拿出一个元素,即把最后一个元素取出来print(l)
last_ele = l.pop()print(last_ele)print(l)# remove:在列表中删除指定的元素,如果指定的值没有在list中,则会报错# 判断语句:# if x in list# list.remove(x)print(l)print(id(l))
l.remove(23)print(l)print(id(l))# clear 清空,列表没变,只是把数据清空了print(l,"--",id(l))
l.clear()print(l,"--",id(l))# 如果不需要地址保持不变,则清空列表可以选择以下方式# a = list()# a = []
['a', 'I Love Lilingling', 23, 45, 675]
['a', 'I Love Lilingling', 23, 45, 675, 100]
['a', 'I Love Lilingling', 23, 'dhsudh', 45, 675, 100]
['a', 'I Love Lilingling', 23, 'dhsudh', 45, 675, 100]
100
['a', 'I Love Lilingling', 23, 'dhsudh', 45, 675]
['a', 'I Love Lilingling', 23, 'dhsudh', 45, 675]
2447470924872
['a', 'I Love Lilingling', 'dhsudh', 45, 675]
2447470924872
['a', 'I Love Lilingling', 'dhsudh', 45, 675] -- 2447470924872
[] -- 2447470924872
# reverse:翻转# 原地翻转
a =[1,2,3,4,5,6,7]print(a)print(id(a))
a.reverse()print(a)print(id(a))
# copy :浅拷贝#列表类型变量赋值示例
a =[1,2,3,4,5,666]print(a)#list类型,直接赋值,是传址操作,对b做修改,也会修改a
b = a
b[3]=777print(a)print(id(a))print(b)print(id(b))# 拷贝:只传值,不传址,采用copy函数,参看以下案例
b = a.copy()print(a,"a的地址是",id(a))print(b,"b的地址是",id(b))
# 创建空元祖
t =()print(type(t))# 创建只有一个元素的元祖
t =(1,)print(type(t))print(t)
t =1,print(type(t))print(t)
t =1,2,3,4,5print(type(t))print(t)
t =(1,2,3,4,5)print(type(t))print(t)# 使用其他结构创建
l =[1,2,3,4,5]
l =tuple(l)print(type(t))print(t)
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-40-a7f4fce0da2c> in <module>
1 # 超标错误
----> 2 print(t[10])
IndexError: tuple index out of range
t =(1,2,3,4,5,6,7,8,9)
t1 = t[1::2]print(id(t))print(id(t1))print(t1)# 切片可以超标
t2 = t[2:100]print(t2)