在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。
Python 的值传递,还是引用传递,查看下面的例子(引用传递,即传递地址): Python一定是引用传递的。
from ctypes import * import os.path import sys def test(c): print ("test before ") print (id(c)) c+=2 print ("test after +") print (id(c)) return c def printIt(t): for i in range(len(t)): print (t[i]) if __name__=="__main__": a=2 print ("main before invoke test") print (id(a)) n=test(a) print ("main after invoke test") print (a) print (id(a))
main before invoke test
8791192975168
test before
8791192975168
test after + #Python是引用传递,但是numbers是不可变对象,经过计算c从2变成4之后,c开辟了一个新的空间,内存地址发生了变化
8791192975232
main after invoke test
2
8791192975168
from ctypes import * import os.path import sys def test(list2): print ("test before ") print (id(list2)) list2[1]=30 print ("test after +") print (id(list2)) return list2 def printIt(t): for i in range(len(t)): print (t[i]) if __name__=="__main__": list1=["loleina",25,'female'] print ("main before invoke test") print (id(list1)) list3=test(list1) print ("main afterf invoke test") print (list1) print (id(list1)) main before invoke test 82843840 test before 82843840 test after + 82843840 #list是可变对象,虽然值发生了变化,但是对应的地址没有变化 main afterf invoke test ['loleina', 30, 'female'] 82843840
函数参数的传递*arg,**karg
def foo(x,*arg,**karg): print(x) print(arg) print(karg) foo(1,2,3,4,5,name='Alex',age=20) 1 (2, 3, 4, 5) #*arg将所有的参数作为元祖一起传递过来 {'name': 'Alex', 'age': 20} #**karg将剩余的参数以字典的形式传递过来
常用的函数zip,lambda,map,reduce,filter
zip函数:
a = [1,2,3] b = [4,5,6] c = [4,5,6,7,8] zipped = list(zip(a,b)) print(zipped) print(list(zip(*zipped))) [(1, 4), (2, 5), (3, 6)] #zip函数实现两个列表的合并,返回的是一个对象,必须使用List方法将其列表显示 [(1, 2, 3), (4, 5, 6)] #*zip代表解压
lambda函数:没有名字,称为“丢弃函数”,使用一次后就可以丢弃了。其表达式为lambda 变量:表达式
la = lambda x,y: x+y print (la(2,3)) 5
map函数: map(function, iterable, ...)
m = map(lambda x:x*x, [1,2,3,4,5]) print(list(m)) [1, 4, 9, 16, 25]
m = map(lambda x,y:x+y, [1,2,3,4,5],[1,2,3,4,5])
print(list(m))
[2, 4, 6, 8, 10]
reduce函数:
from functools import reduce reduce(lambda x, y: x+y, [1,2,3,4,5]) 15
filter函数:
fi = filter(lambda x: x%2==0, [1,2,3,4,5]) print (list(fi)) [2, 4]