Python 函数表示
定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表):
函数体
例子:
def say_hello(name):
print("Hello: ", name)
调用函数:
say_hello("The Earth")
结果
Hello: The Earth
参数传递:
1 对于不可变类型(数字,字符串,元组),相当于值传递; 2 对于可变类型(列表,集合,字典),相当于引用传递
def change_func(number):
number += 1
return number
def change_list(my_list):
my_list.append(1)
return my_list
num_a = 1
print("change_func return value: ", change_func(num_a))
print("original number a: ", num_a)
list_a = [3, 2]
print("change_list return value: ", change_list(list_a))
print("original list a: ", list_a)
结果
change_func return value: 2
original number a: 1
change_list return value: [3, 2, 1]
original list a: [3, 2, 1]
参数类型
- 位置参数: 位置参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
def add_number(number_a, number_b):
return number_a + number_b
print(add_number(1, 2))
结果
3
- 关键字参数 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
def get_name(first_name, second_name):
print("Hello, ", first_name, second_name)
get_name(second_name="Zhang", first_name="San")
get_name("Zhang", "San") # 没有声明关键字的话按位置参数处理
结果
Hello, San Zhang
Hello, Zhang San
- 默认参数 调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 title_format 参数,则使用默认值:
def print_title(title, title_format=False):
if title_format:
print(title.title())
else:
print(title)
print_title("hello world")
print_title("hello_world", title_format=True)
# 这样会报错 SyntaxError: positional argument follows keyword argument ,意思是位置参数要在关键字参数前面。
# print_title(title_format=True, "hello_world")
print_title("hello_world", True) # 如果顺序正确,可以不用标明关键字
结果
hello world
Hello_World
Hello_World
- 不定长参数 你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数
- *号,加了*号的参数会以元组形式传给函数,只允许有一个
def test_tuple(name, *t):
print(name)
print(t)
print(type(t))
test_tuple("Tom", "Jackson", "Alex")
test_tuple("David")
结果
Tom
('Jackson', 'Alex')
<class 'tuple'>
David
()
<class 'tuple'>
- **号, 只允许有一个 加了**号的参数会以字典形式传给函数,调用函数时候要传键值对,key=value,key值为字符串类型,而且不用引号或双引号标识
def test_dict(name, **d):
print(name)
print(d)
print(type(d))
test_dict(1, a=2, b="3", c=(1, 2, 3), list_1=[4, 5, 6])
test_dict("4")
结果
1
{'a': 2, 'b': '3', 'c': (1, 2, 3), 'list_1': [4, 5, 6]}
<class 'dict'>
4
{}
<class 'dict'>
参数顺序
位置参数,关键字参数(默认参数),*号,**号
def test_order(arg1, arg2="default", *t1, **d1):
return
声明函数时,参数中星号 * 可以单独出现。 如果单独出现星号 * 后的参数必须用关键字传入。
def test_asterisk(a, b, *, c):
print("a = ", a, "b = ", b, "c = ", c)
# test_asterisk(1,2,3) #TypeError: test_asterisk() takes 2 positional arguments but 3 were given
test_asterisk(1, 2, c=3)
结果
a = 1 b = 2 c = 3
匿名函数
python 使用 lambda 来创建匿名函数。 不需要return 语句
my_sum = lambda arg1, arg2: arg1 + arg2
my_print = lambda arg1: print(arg1)
print(my_sum(1, 2))
my_print("Thanks")
结果
3
Thanks