python函数

函数

内置函数

  • 截⽌到python版本3.6.2,现在python⼀共为我们提供了68个内置函数
abs()dict()help()min()setattr()
all()dir()hex()next()slice()
any()divmod()id()object()sorted()
ascii()enumerate()input()oct()staticmethod()
bin()eval()int()open()str()
bool()exec()isinstance()ord()sum()
bytearray()filter()issubclass()pow()super()
bytes()float()iter()print()tuple()
callable()format()len()property()type()
chr()frozenset()list()range()vars()
classmethod()getattr()locals()repr()zip()
compile()globals()map()reversed()__import__()
complex()hasattr()max()round()
delattr()hash()memoryview()set()

自定义函数

格式

def func1():
    # 示例函数
    print('hello')
    return 0

func1()

函数传参

  • 实参:实际要交给函数的内容,如下面的1,2,3
  • 形参:在定义函数时只是一个形式,表示这里有一个参数,如下面的a,b,c
  • 位置参数(实参与形参位置应该一一对应)
def func1(a, b, c):
    # 示例函数
    print('传入的第一个参数{}'.format(a))
    print('传入的第二个参数{}'.format(b))
    print('传入的第三个参数{}'.format(c))
    return 0

func1(1, 2, 3)

#执行结果
传入的第一个参数1
传入的第二个参数2
传入的第三个参数3
  • 关键字参数(可以调整顺序)
def func1(a, b, c):
    # 示例函数
    print('传入的第一个参数{}'.format(a))
    print('传入的第二个参数{}'.format(b))
    print('传入的第三个参数{}'.format(c))
    return 0

func1(b=10, a=20, c=30)

#执行结果
传入的第一个参数20
传入的第二个参数10
传入的第三个参数30
  • 默认参数(缺省参数):有默认值的参数,不传参使用默认值,传参使用传入值
def ssh_connect(host, user='root', port=22):
    print("ssh {}@{} -p {}".format(user, host, port))

ssh_connect("192.168.139.10")
ssh_connect("192.168.139.10", "zhangsan")
ssh_connect("192.168.139.10", "zhangsan", 8080)

#执行结果
ssh root@192.168.139.10 -p 22
ssh zhangsan@192.168.139.10 -p 22
ssh zhangsan@192.168.139.10 -p 8080
  • 可变长参数:可以传入不定个数的参数
#求和
def add_num(*args):
    sum = 0
    for i in args:
        if isinstance(i, int):
            sum += i
    print(sum)

add_num(1,2,4,"a")

#执行结果
7
  • 多个关键字参数转字典
def func1(*args, **kwargs):
    print(args, type(args))
    print(kwargs, type(kwargs))

func1("a", 1, [1, 2, 3],{"name":"zhansan", "age":15},name="zhansan",age=12)

#执行结果
('a', 1, [1, 2, 3], {'name': 'zhansan', 'age': 15}) <class 'tuple'>
{'name': 'zhansan', 'age': 12} <class 'dict'>

args:接收除键值对以外的所有参数,转化为元祖形式

kwargs:只接受键值对,转化为字典形式

函数返回值

  • return:返回。可以用return返回函数运行的结果,赋值给变量,方便后续调用
  • 一旦遇到return,立即结束函数
  • 不写return,会默认返回一个None
  • 案例:
def add_num(*args):
    sum = 0
    for i in args:
        if isinstance(i, int):
            sum += i
    return(sum)

add = add_num(1,2,4,"a")	#传参调用函数,函数返回sum的值;将sum又赋给了变量add,方便下面调用
if add > 10:
    print("大于10")
else:
    print("不大于10")
    
#执行结果
不大于10

函数要先定义,才能调用

定义函数:就是在内存中开辟一块空间,存放函数体内的代码,通过函数名来调用

函数名的本质就是函数的内存地址

调用函数就是执行函数体内的代码

函数的变量作用域

  • 全局变量:代码在运行伊始,默认开辟空间,全局有效
  • 局部变量:在函数运行时开辟的临时空间,只在函数内部生效
name = "zhangsan"	#全局变量
def func1():
    age = 18		#局部变量
    print(name)
    print(age)
func1()
print(name)
print(age)

#执行结果
zhangsan
18
zhangsan
Traceback (most recent call last):
  File "D:/2021-11-18创建python/函数.py", line 41, in <module>
    print(age)
NameError: name 'age' is not defined

递归函数

  • 递归:在⼀个函数⾥再调⽤这个函数本身

  • 递归的最⼤深度为997

  • 案例:汉诺塔问题

    • 从左到右 A B C 柱 ⼤盘⼦在下, ⼩盘⼦在上, 借助B柱将所有盘⼦从A柱移动到C柱, 期间只有

      ⼀个原则: ⼤盘⼦只能在⼩盘⼦的下⾯.

      如果有64层,先将A柱上的63层移动到B柱上,然后将A柱的第64个移动到C柱 上,然后将B柱上的63层移动到C柱上即可。 那怎么把63层都移到B柱上,这个问题可以⽤上⾯相同的⽅法解决

def move_game(n, a, b, c):
    if n == 1:
        print(a, '->', c)
    else:
        #  将n-1个盘子从a --> b
        move_game(n-1, a, c, b)
        # 将剩余的最后一个盘子从a --> c
        print(a, '->', c)
        # 将剩余的n-1个盘子从 b --> c
        move_game(n-1, b, a, c)

n = int(input('请输入汉诺塔的层数:'))
move_game(n, 'A', 'B', 'C')

#执行结果
请输入汉诺塔的层数:4
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值