练习代码:
# #认识函数: 在一个完整的项目中,有些功能会反复使用,那么会将这个功能封装成函数,当我们想使用功能的时候,直接调用函数即可 #本质: 函数就是对功能的封装 #优点:1.简化代码结构,增加代码的重用度 #2.如果想修改某些功能或者调试某个BUG,还需修改对应的函数即可 #定义函数: #格式: def 函数名(参数列表): # 语句 # return 表达式 # #无参,无返回值的函数 def myPrint(): print("ben is a good man") #函数调用 myPrint() #函数的参数,形式参数,参数按顺序传递 def Myprint1(str,age): print(str,age) #实参:调用函数时,给函数传递的数据,本质是值 Myprint1("ben is a good man",18) #求和 def SUM(num1,num2): return num1+num2 #return 后面的代码不执行 print("***********") res = SUM(1,2) print(res) #值传递:传递的是不可变类型 (string,tuple,number) def fun1(num): print(id(num)) num = 10 print(id(num)) temp = 20 fun1(temp) print(temp) print("************") #引用传递,传递的是可变类型(list dict set) def fun2(lis): lis[0] = 100 li = [1,2,3,4] fun2(li) print(li) print("************") a = 10 b = 10 print(id(a),id(b)) c = 10 d = 20 print(id(c),id(d)) d = c print(id(c),id(d)) print("************") #关键字参数:允许函数调用时的顺序与定义时不一样 def p(str,age): print(age,str) #使用关键字参数 p(age = 18,str="abc") #默认参数:调用函数时,如果没有传递参数,则使用默认参数 def p1(str = "abc",age = 18): print(age,str) #使用关键字参数 p1() #以后要用默认参数,最好将默认参数放到最后 def p2(str,age=18): print(age, str) p2("abc") print("************") # 能处理比定义时更多的参数 #加了*的变量,存放所有未命名的变量参数,如果在函数调用时没有指定参数,它就是一个空元祖 def p3(name,*arr): print(name) for x in arr: print(x) p3("a","b","c") def p4(*l): sum = 0 for i in l: sum += i return sum print(p4(1,2,3,4,5)) print("************") #字典 **代表键值对参数, 和*所代表的意义类似 def p5(**kwargs): print(kwargs) print(type(kwargs)) p5(x = 1, y = 2, z = 3) print("************") def p6(*args,**kwargs): pass #代表一个空格语句 #匿名函数:不使用def这样的语句定义函数,使用lambda来创建匿名函数 #特点:1.lambda知识一个表达式,函数体比def简单 # 2.lambda的注意是一个表达式,而不是代码块,仅仅智能在lambda表达式中封装简单的逻辑 # 3.lambda函数有自己的命名空间,且不能访问自由参数列表之外的货全局命名空间的参数 # 4.虽然lambda是一个表达式且看起来只能写一行,和c c++内联函数不同 #格式: lambda 参数1,参数2,。。。。。。参数n : expression sum = lambda num1,num2 : num1 + num2 print(sum(1,2)) print("************")
运行结果:
D:\pycharm\python\venv\Scripts\python.exe D:/pycharm/python/017函数概述.py
ben is a good man
ben is a good man 18
3
1445392784
1445392464
20
************
[100, 2, 3, 4]
************
1445392464 1445392464
1445392464 1445392784
1445392464 1445392464
************
18 abc
18 abc
18 abc
************
a
b
c
15
************
{'z': 3, 'x': 1, 'y': 2}
<class 'dict'>
************
3
Process finished with exit code 0