# 定义一个函数 def hello(): print("hello world") def hello_name(name): print("hello", name) def area(a, b): return a+b # 调用函数 hello() hello_name("siri") print(area(2, 4))2.参数传递
- 可更改对象与不可更改对象
(1)在python中,类型属于对象,变量是没有类型的,变量可以理解为是一个对象的引用,是一个指向对象的指针;
(2)可更改对象:数字、字符、元组,不可更改对象:列表、字典、集合;
(3)修改不可变对象的值时,实际上是重新生成了一个对象,原来的引用指向新生成的对象;
(4)修改可变对象的值时,实际上是直接修改了原来的值,引用没有变化;
(5)不可变对象传递参数时,传递过去的是他的值,在函数中修改这个值后,是新生成了一个对象,原来的变量还是指向原来的对象,所以原来的变量的值不会改变;
def test(b): print(id(b)) b = b/2 print(id(b)) a = 1 print(id(a)) test(a)
C:UsersmaxDesktoppythonStudyvenvscriptspython.exe C:/Users/max/Desktop/pythonStudy/demo.py 140707870840480 140707870840480 2393646856240 进程已结束,退出代码 0
(6)可变对象传递参数时,传递过去的是他本身,修改后这个变量的值也会改变。
def test(b): print(id(b)) b[0] = 2 print(id(b)) a = [1, 2] print(id(a)) test(a)
C:UsersmaxDesktoppythonStudyvenvscriptspython.exe C:/Users/max/Desktop/pythonStudy/demo.py 1631128189056 1631128189056 1631128189056 进程已结束,退出代码 0
- 调用函数时参数种类
(1)必须参数
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
(2)关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
def print_it(name, age): print(name, "is", age) # 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值 print_it(age=8, name="Berry")
C:UsersmaxDesktoppythonStudyvenvscriptspython.exe C:/Users/max/Desktop/pythonStudy/demo.py Berry is 8 进程已结束,退出代码 0
(3)默认参数
调用函数时,如果没有传递参数,则会使用默认参数。
def print_it(name, age=18): print(name, "is", age) print_it("Berry")
C:UsersmaxDesktoppythonStudyvenvscriptspython.exe C:/Users/max/Desktop/pythonStudy/demo.py Berry is 18 进程已结束,退出代码 0
(4)不定长参数
# 加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数 def print_it1(*num): print(num) # 加了两个星号**的参数会以字典的形式导入 def print_it2(**num): print(num) # 声明函数时,参数中星号*可以单独出现,单独出现星号*后的参数必须用关键字传入 def print_it3(*, c): print(c) # 可以不传递变量 print_it1() print_it1(1, 2, 3) print_it2() print_it2(a=1, b=2, c=3) print_it3(c=1)
C:UsersmaxDesktoppythonStudyvenvscriptspython.exe C:/Users/max/Desktop/pythonStudy/demo.py () (1, 2, 3) {} {'a': 1, 'b': 2, 'c': 3} 1 进程已结束,退出代码 0
(5)强制位置参数
- python3.8新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
- python 使用 lambda 来创建匿名函数
(1)lambda 只是一个表达式,函数体比 def 简单很多。
(2)lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
(3)lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
(4)虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
sum = lambda a, b: print(a+b) sum(1, 2)4.return语句
- 用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
def test(): pass print(test()) # None
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)