def 函数名(参数):
函数体
return 语句
下面定义一个简单的函数,例如:
def display(param1, param2):
print('参数1:' + param1)
print('参数2:' + param2)
display("hello", "world")
函数定义中可能包含多个形参,因此、函数调用也需要传递多个实参。向函数传递实参的方式有很多种,可以使用位置实参,这要求实参的顺序与形参的顺序相同;也可以使用关键字实参,其中每个实参都由变量名和值组成;还可以使用列表和字典
函数调用时,必须将函数调用中每个实参都关联到函数定义中的一个形参。最简单的关联方式是基于实参的顺序,这种关联方式称为位置实参,例如:
def display(param1, param2):
print('参数1:' + param1)
print('参数2:' + param2)
display("hello", "world")
display("world", "hello")
上面两个函数调用,因为传参的顺序不同,有不同的输出结果
关键字实参是传递给函数的名称对,例如:
def display(param1, param2):
print(param1 + " " + param2)
display(param1="hello", param2="world") # 输出结果:hello world
display(param2="world", param1="hello") # 输出结果:hello world
注意:使用关键字实参时,务必准确指定函数定义中的形参名
strings、tuples 和 numbers 是不可更改的对象,而 list、dict 等则是可以修改的对象。
变量赋值
参数传递
注意:python中一切都是对象,严格意义不能说值传递还是引用传递,应该说传不可变对象和传可变对象。
下面是一个示例:
def param_test(obj):
obj += obj
print('形参值为:', obj)
print("*******值传递*****")
a = 'hello'
print('a的值为:', a)
param_test(a)
print('实参的值为:', a)
print("*******引用传递*****")
b = [1, 2, 3]
print('b的值为:', b)
param_test(b)
print('实参的值为:', b)
输出结果:
*******值传递*****
a的值为: hello
形参值为: hellohello
实参的值为: hello
*******引用传递*****
b的值为: [1, 2, 3]
形参值为: [1, 2, 3, 1, 2, 3]
实参的值为: [1, 2, 3, 1, 2, 3]
编写函数时,可以给函数形参指定默认值,例如:
def display(param1, param2="world"):
print(param1 + " " + param2)
display(param1="hello") # 输出结果:hello world
注意:使用默认值时,必须先在形参列表中列出没有默认值的形参,再列出有默认值的形参
函数可以不返回值,也可以返回一个或一组值,不带参数值的return语句返回None。下面定义一个函数,返回值是字典,例如:
def build_person(first_name, last_name):
person = {"first":first_name, "last":last_name}
return person
musician = build_person("jimi", "hendirx")
print(musician) # 输出结果:{'first': 'jimi', 'last': 'hendirx'}