python学习笔记之函数一
一、数据
1.序列内存示意图:
2.字典解包操作
3.zip()并行迭代:可对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。
names=['高高','洋洋','燕燕']
ages=[20,54,12]
jobs=['老师','程序员','公务员']
for name,age,job in zip(names,ages,jobs):
print('{0}---{1}----{2}'.format(name,age,job))
二、函数及面向对象:
1.函数基本分类:内置函数、标准库函数(通过import语句导入)、第三方库函数(python社区提供了很多高质量的库,下载安装这些库后,通过import语句导入,然后使用)、用户自定义函数
2.函数调用内存使用情况分析:
在调用函数时会在堆里开辟空间存储对象,然后在栈里开辟函数名空间存储堆空间的地址。
3.通过help(函数名.doc)打印注释
def ziptest():
'''
人生苦短
我爱python
yayayd
'''
names=['高高','洋洋','燕燕']
ages=[20,54,12]
jobs=['老师','程序员','公务员']
for name,age,job in zip(names,ages,jobs):
print('{0}---{1}----{2}'.format(name,age,job))
help(ziptest.__doc__)
4.全局变量和局部变量:
5.global关键字,修改全局变量,global()、local()函数示例:
a=4 #全局变量
def test():
b=4
global a
a=300
print(a,b*10)
print(locals())
print(globals())
test()
print(a)
6.参数的传递(可变对象与不可变对象)
当传入的是可变对象,则形参和实参指向同一对象,操作都在统一个对象上进行
当传入的对象是不可变对象,传递的也是对象的引用,开始时形参指向不可变对象的,当对不可变对象进行操作时,由于不可变对无法修改,系统会创建一个对象,此时形参指向新的对象(故不会修改到实参的值)
7.浅拷贝和深拷贝(浅拷贝只拷贝父本本身;深拷贝拷贝全部,包括子代)
两个内置函数:浅拷贝copy() --不拷贝对象的内容,只拷贝子对象的引用; 深拷贝deepcopy()–连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象
示例:浅拷贝
import copy
a=[10,20,[5,6]]
b=copy.copy(a)
print("a:",a)
print("b;",b)
b.append(30)
b[2].append(7)
print("----浅拷贝---")
print('a=',a)
print('b=',b)
输出:
内存示意图:
示例:深拷贝
import copy
#测试深拷贝
def testDeepCopy():
a = [10, 20, [5, 6]]
b = copy.deepcopy(a)
print("a:", a)
print("b;", b)
b.append(30)
b[2].append(7)
print("----深拷贝---")
print('a=', a)
print('b=', b)
testDeepCopy()
输出:
内存示意图:
8.传递不可变对象时,不可变对象包含可变对象,如果发生拷贝是浅拷贝
9.参数的类型:
位置参数
默认值参数
命名参数
def test10(a,b,c,d):
print('{0}---{1}---{2}----{3}'.format(a,b,c,d))
def test2(a,b,c=10,d=20): #默认值参数,必须位于其他参数后面
print('{0}---{1}---{2}----{3}'.format(a, b, c, d))
test10(10,20,30,40) #位置参数
test10(d=20,c=30,a=25,b=10) #命名参数,通过形参名称来匹配
test2(10,20)
test2(41,20,45)
可变参数:*param(一个星号),将多个参数收集到一个’元组’对象中
**param(两个星号),将多个参数收集到一个“字典”中
强制命名参数:在带星号的可变参数后面增加新的参数,必须是强制命名参数
10.lambda表达式和匿名参数
f=lambda a,b,c,d:a+b+c+d
print(f(2,3,4,5))
g=[lambda a:a+2,lambda b:b+3]
print(g[0](6))
11.eval()函数:
s='print("abcd")'
eval(s)
a=10
b=20
c=eval("a+b")
print(c)
dict1=dict(a=100,b=200)
d=eval("a+b",dict1)
print(d)
结果:
12.递归函数:
示例:
#使用递归函数计算阶乘
def fad(n):
if n==1:
return 1
else:
return n*fad(n-1)
res=fad(8)
print(res)