Python 函数

1.1 参数结构

函数是可以传递参数的,当然也可以不传递参数。同样,函数可以有返回值,也可以没有返回值。为了方便介绍,将Python的传参方式归为4类。

1.传统参数传递

(1) 无参数传递
def func():
	print("这是无参数传递")
# 调用func(),将打印输出"这是无参数传递"字符串。
(2) 固定参数传递
def func(x):
	print(f"传递的参数为:{x}")
# 调用func(hello),将打印输出"传递的参数为:hello"字符串。

对于传递多个参数,例如传递三个参数,可以这样定义:

def func(x, y, z):
	pass

2.默认参数传递

Python默认参数传递的机制减少了重复参数的多次输入,函数允许默认参数是大多数程序语言都支持的。通过下面的代码来介绍这种机制。

def func(x, y = 100, z = 'hello'):
	print(x, y, z)
func(0) # 0 100 hello
func(0, 1) # 0 1 hello
func(0, 34,  'world') # 0 34 world
func(66, z = 'hello world') # 66 100 hello world
func(44, y = 90, z = 'kkk') # 44 90 kkk

从这里可以知道,y = 100,z = 'hello’都是默认参数,当不输出y和z的参数值时,函数默认给出y = 100,z = 'hello’的值。但值得注意的是给参数赋值时要注意参数的顺序,除非标明这个数值时赋给哪个参数的,如func(44, y = 90, z = ‘kkk’),或者func(y = 90, z = ‘kkk’, x = 44),若写成func(y = 90, z = ‘kkk’, 44) 就会报错,因为函数不知道这里的44时赋值给哪个参数的,所以不标明就必须按照“出场”的顺序。

3.未知参数个数传递

对于某些函数,我们不知道传进来多少个参数,只知道对这些参数进行怎样的处理。Python允许我们创造这样的函数,即未知参数个数的传递机制,只需要在参数前面加个 * 就可以了。
举个简单的例子:你身份证上姓名叫姚博汶,在家有个小名叫汶汶,在中学阶段同学给你取了个外号“姚狗蛋儿”,在高中阶段同学们又了个雅称“学渣”>>>外号可能还有很多,如大学阶段可能还会有,所以其数量就不能确定。现在要把这些外号作为一个函数中的参数,怎么办呢?只需要在参数前面加个*就解决了。实例代码如下:

def func(name, *args):
	print(name + "有以下称呼:")
	for i in args:
		print(i)
func('姚博汶', '汶汶', '姚狗蛋儿', '学渣')
# 测试及运行结果如下
# 姚博汶有以下称呼:
# 姚博汶
# 汶汶
# 姚狗蛋儿
# 学渣

4.带键参数传递

带键参数传递是指参数通过键值对的方式进行传递。什么叫键值对?下面这个例子将会展示这种结构。带键参数的传递只需要在参数前面加**就可以了。实例代码如下:

def func(**kwargs):
    print(type(kwargs))
    for i in kwargs:
        print(i, kwargs[i])
        
func(aa = 1, bb = 2, cc = 3)
print("-------------------")
func(x = 1, y = 2, z = 'hello')
# 测试及运行结果
# <class 'dict'>
# aa 1
# bb 2
# cc 3
# -------------------
# <class 'dict'>
# x 1
# y 2
# z hello

可以看到,参数的类型为dict。

1.2 回调函数

回调函数又叫函数回调,指的是将函数作为参数传递到另外的函数中执行。例如将A函数作为参数传递到B函数,然后在B函数中执行A函数。这种做法的好处是函数被定义之前就可以使用函数,或者对于其他程序提供的API进行调用。示例代码如下:

def func(fun, args):
    fun(args)

def f1(x):
    print(f"这是f1函数:{x}")

def f2(x):
    print(f"这是f2函数:{x}")

func(f1, 1)
func(f2, "hello")
# 测试及运行结果如下
# 这是f1函数:1
# 这是f2函数:hello

上面的程序从func函数中分别调用了f1与f2函数。可以看到,在f1或者f2函数被定义之前,我们在func函数中就对其进行了调用,这就是所谓的函数回调。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值