Python函数学习

  • 1.函数基础:
  • 1.1 定义函数
  • 1.2 函数参数
  • 1.3 函数返回值--return
  • 2.函数类型:
  • 2.1 递归函数


1.函数基础:

1.1 定义函数

函数的定义:使用def内置函数和自定义函数;

def fun():
 	print("Hello World")

1.2 函数参数

位置参数

def fun(x, n):
    s = 1
    while n > 0:
        n -= 1
        s = s * x
    return s

print(fun(5, 2))

函数有两个参数一个x,一个n,调用fun()函数时按位置传入参数xy fun(5, 2): x=5,n=2

默认参数:
可以简化函数的调用
规则:
1.必选参数在前,默认参数在后

def fun(x, n=2):
    s = 1
    while n > 0:
        n -= 1
        s = s * x
    return s

此时为参数n设定了默认参数2
函数调用:
fun(5)必选参数x=5,n的默认参数为2
fun(5, 3)必选参数为x=5,n可以再进行设置n=3

可变参数:
可变参数–函数传入的参数个数是可变的(不定长的),可以传入0个,1个,2个但是调用时需要预先组装出一个tuple或者list
*args:在参数名前面加一个*定义可变参数

def sumnumber(*number):
    sum01 = 0
    for n in number:
        sum01 = sum01 + n
    return sum01

print(sumnumber(1, 2, 3, 4, 5, 6))

结果:

(1, 2, 3, 4, 5, 6)
21

简化输入方式:

lists = [1, 2, 3, 4, 5, 6]
print(sumnumber(*lists))

结果一致:

(1, 2, 3, 4, 5, 6)
21

定义了一个*number可变参数,在参数内部接收到的number是一个tuple(元组)
*args:*号是必须的,args是可随意设定的
用来发送一个非键值类型的可变参数tuple给函数

关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些参数在函数内部自动组成一个dict(字典)

def student(name, age, **kw):
    print(name, age, "other:", kw)

创建一个student()函数,除了必选参数name, age, 还有关键字参数**kw 调用该参数时,可以只传入必选参数,如下

student('Alien', 17)

结果:

Alien 17 other: {}

加上关键字参数后,如下:

student('Mikasa', 16, city='Maria', telephone='12345678901')

传入方式:键(key)= 值(value)
加入了关键字city='Maria'telephone='12345678901'传入函数会变为dict字典

{city': 'Maria', 'telephone': '12345678901'}

结果:

Mikasa 16 other: {'city': 'Maria', 'telephone': '12345678901'}

简化调用结果:

extra = {'city': 'Beijing', 'job': 'Engineer'}
student('Mikasa', 16, **extra)

结果:

Mikasa 16 other: {'city': 'Beijing', 'job': 'Engineer'}

**kwrgs:允许将不定长的键值作为参w数传递给函数,如果想要在函数中处理字典就可以使用它,也可以叫字典参数

函数命名参数顺序:
必选参数(位置参数argument) – 可变参数(*args) – 关键字参数(**kwrgs)

fun(argument, *args, **kwrgs)

1.3 函数返回值–return

返回值的3种情况:
1.没有返回值–None

  • 不写return
  • 只写一个return:结束一个函数 return
  • return None:不常用 return None

2.返回1个值

  • 可以返回任何数据类型
  • 只要有返回就可以在函数外部接收
  • 如果一个函数中有多个return,那么只执行第一个

3.返回多个值

return name,age, kw
  • 用多个变量接接收,使用name, age, kw来接收

举例:

def student(name, age, **kw):
    # print(name, age, "other:", kw)
    return name, age, kw


extra = {'city': 'Beijing', 'job': 'Engineer'}
name, age, kw = student('Mikasa', 16, **extra)
print(name)
print(age)
print(kw)

结果:

Mikasa
16
{'city': 'Beijing', 'job': 'Engineer'}
  • 用一个变量接收,得到的是一个元组(tuple)
def student(name, age, **kw):
    # print(name, age, "other:", kw)
    return name, age, kw


extra = {'city': 'Beijing', 'job': 'Engineer'}
student01 = student('Mikasa', 16, **extra)
print(student01)

结果:

('Mikasa', 16, {'city': 'Beijing', 'job': 'Engineer'})

得到的是一个(‘Mikasa’, 16, {‘city’: ‘Beijing’, ‘job’: ‘Engineer’})元组
可以使用for进行遍历:

for i in student01:
    print(i)

结果:

Mikasa
16
{'city': 'Beijing', 'job': 'Engineer'}

2.函数类型:

2.1 递归函数

函数内部可以调用其他函数;
在一个函数内部调用其本身,那这个函数就是递归函数

使用递归函数计算累加
fun(n) = ∑n = 1+2+3+4+…+(n-1)+n=fun(n-1) + n

def fun(n):
    if n == 1:
        return 1	# 递归停止,当传入n=1时,return 1
    return n + fun(n-1)

print(fun(5))

累加的方式:

第一次:5 + fun(4)
第二次:5 + (4 + fun(3))
第三次:5 + (4 + (3 + fun(2)))
第四次:5 + (4 + (3 + (2 + fun(1))))
第五次:5 + (4 + (3 + (2 + 1)))

结果:

15

使用递归函数进行累积:
fun(n) = n! = 1 * 2 * 3 * …* (n-1) * n = n * fun(n-1)

def fun(n):
    if n == 1:
        return 1
    return n * fun(n-1)

print(fun(5))

累积的方式:

第一次:5 * fun(4)
第二次:5 * (4 * fun(3))
第三次:5 * (4 * (3 * fun(2)))
第四次:5 * (4 * (3 * (2 * fun(1))))
第五次:5 * (4 * (3 * (2 * 1)))

结果:

120