目录
分模块思想,分任务编程,是编程的一大重要思维,其中的实现,函数就担当了一个重要角色,今天我们就来学习Python的初级函数。
def 函数名(): 函数体
# 定义一个简单函数
def test():
print(2**2)
print(2**3)
print(2**4)
# 调用函数
test()
定义语法: def 函数名(var1,var2,……) 函数体 调用的时候,有两种方式:
# 定义一个带参数的函数
def test(var1, var2):
print(var1+var2)
print(var1**2+var2**2)
print(var1**3+var2**3)
# 顺序调用带参数的函数
print("顺序调用")
test(1, 2)
# 关键字调用带参数函数
print("关键调用")
test(var2=2, var1=1)
当形参为下面两种形式的时,为不定长参数
注意:装包与拆包
# 定义不定长的参数- *args 接收的是元组类型
def test1(*args):
print(args, type(args))
print(*args)
# 定义不定长的参数- *args 接收的是字典类型
def test2(**kwargs):
print(kwargs, type(kwargs))
# 输出keyword
print(*kwargs)
# 使用value,不能打印出来,不过可以使用
# 而且形参与实参的keyword一样,其实就是关键字调用
test3(**kwargs)
def test3(a, b, c):
print(a)
print(b)
print(c)
# 调用参数,并接收的是 元组
test1(1, 2, 3)
# 调用参数,并接收的是 字典
test2(a="zsj", b=18, c="m")
在定义函数的时候,给形参赋值,就是缺省函数,所赋的值便是默认值, def test(name="me") 而在调用的时候,可以传入参数,也可以不传入参数。 传入参数时,以所传的参数优先。 不传入参数时,为默认值。
# 定义缺省参数
def test(name="zyg"):
print(name)
# 不传入参数, 默认值
test()
# 传入参数,优先值是传入的值
test("me")
在python里函数的传值:都是==引用传递==
Python的可变数据类型与不可变数据类型
Python里函数是否可以改变实参内容问题
# 定义一个函数,用id()来判断其是值传递,还是地址传递?
def test(num):
print(id(num))
num[1] = 5
print(num)
print(id(num))
list1 = [1, 2, 3]
print(id(list1))
test(list1)
print("最后的id", id(list1))
print("最后的值", list1)
# 定义一个函数,用id()来判断其是值传递,还是地址传递?
def test(num):
print(id(num))
num = 5
print(num)
print(id(num))
number = 1
print(id(number))
test(number)
print("最后的id", id(number))
print("最后的值", number)
当我们需要函数处理过后,返回一个结果值。可以使用 return 结果值 结果值:可以是元组类型,列表类型,拆包后的数据
# 定义一个具有返回值的函数
def test(a, b):
mysum = a + b
mysub = a - b
return (a, b)
n1 = 4
n2 = 2
sum_1, sub_1 = test(n1, n2)
print(sum_1)
print(sub_1)
函数的说明都有一个标准的写法,才能调用help查看 def 函数名(): """ 功能:xxxxx var1: var2: .... return xxxx """ 查看帮助可以用:help(函数名) ,注意是函数名,不是函数调用。
# 定义一个具有返回值的函数
def test(a, b=1):
"""
功能:该函数实现两个值的加减,并返回结果。
:param a: 参与运算的一个值,数字类型,不可选,无默认值
:param b: 参与运算的另一个值,数字类型,可选,默认值为1
:return: 和与差的结果,元组类型。例如 (1, 2)
"""
mysum = a + b
mysub = a - b
return (a, b)
# 查看帮助
help(test)