python函数

本文深入解析Python函数的定义、调用及参数传递方式,涵盖无参、有参、空函数及匿名函数等概念,同时介绍了递归函数、高阶函数、闭包函数和装饰器的应用,适合Python初学者和开发者阅读。

函数的定义

 

语法


def 函数名(参数1,参数2,参数3,...):
'''注释'''
函数体
return 返回的值

# 函数名要能反映函数本身所实现的意义
def f():
pass
def myfunc():
print("欢迎来到千锋教育,实现你梦想!")

定义函数的三种形式

 

无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印
def myfunc():
print("
www.qfedu.com")
有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计时长,数学运算
def get_reslut(x, o , y):
print(x)
print(o)
print(y)

空函数:设计代码结构
def auth_user(user,password):
'''
auth function
:param user: 用户名
:param password: 密码
:return: 认证结果
'''
pass

def get(filename):

'''
:param filename:

:return:

'''

pass

def put(filename):

'''
:param filename:

:return:

'''

函数调用


函数的调用:函数名加小括号
1. 先找到名字
2. 根据名字调用代码

def myfunc():
print("欢迎来到千锋教育,实现你梦想!")
# 调用
myfunc()
# 输出
欢迎来到千锋教育,实现你梦想

有参函数和无参函数的调用对比


1、定义时无参,意味着调用时也无需传入参数
2、定义时有参,意味着调用时则必须传入参数

函数返回值 return


不定义,默认返回 None
返回多个值时,每个值用逗号隔开,也就是元组的形式

接收函数的返回值
必须先执行函数,此函数的返回值才会被创建并返回
print("foo 函数的返回值是:", foo())
在函数执行的过程中,当在函数体内遇到了 return 关键字,函数就会立刻停止执行,并返回其返回值, return 之后的代
码 不会 被执行

def echo(arg):
return arg # 用关键字 return 定义函数的返回
# 调用函数,并用一个变量接收其返回值
ret = echo('yangge')
print(ret)
# 执行print 的结果
'yangge'

函数的参数


什么是形参:
对于函数来说,形式参数简称形参,是指在定义函数时,定义的一个变量名;
def foo(arg1,arg2,arg3)
什么是实参:
对于函数来说,实际参数简称实参,是指在调用函数时传入的实际的数据,是给形参赋值的,可以理解为变量的值;函数调用时,将值绑定到变量名上,函数调用结束,解除绑定。
foo(1,2,3)
用 * 收集位置参数
用 ** 收集关键字参数

三种形参在定义函数时的顺序如下:
In [108]: def position_arg(arg1, arg2, *args,
k1='v1', **kwargs):
...: pass
...:

匿名函数


lambda 是用一条语句来表式的匿名函数,可以用它来代替简单的小函数。
In [127]: lambda arg1,arg2: arg1 + arg2
Out[127]: <function __main__.<lambda>>
sum_number = lambda arg1,arg2:arg1 + arg2
sum_number(5, 6)

函数递归


函数递归就是,一个函数在内部,对自身进行调用,此时这个函数又可以称为递归函数。

内置函数


abs()  获取一个数字的绝对值
all()   接受一个序列,如果序列内的所有元素都为真,那么返回True,否则返回False
any() 同 all,任何一个为真,则返回 True。
bin(), 6. oct(), 7. hex()   三个函数功能为:将十进制数分别转换为 2/8/16进制。
callable()  判断对象是否可以被调用,能被调用的对象就是一个 callables对象,比如函数和带有 __call__()的实例。
dir()  不带参数时返回当前范围内的变量,方法和定义的类型列表,带参数时返回参数的方法列表
divmod()  分别取商和余数; 重点掌握,做分页时用到

高阶函数

 

特点:


把一个函数的函数名当做实参传给另一个函数
函数返回值可以是一个函数的函数名,即函数本身

函数可以作为参数被传递
# 定义一个函数,打印 数字 521
def foo():
print(521)

# 再定义一个函数,这个函数有个形参 func
def run_func(func):
func()

# 执行run_func 函数时,把 answer函数的函数名当做一个
实参传给这个函数
run_func(foo)
# 传的时候可不是传 answer() 而是 answer 函数的本身

def run_func(func):
print(func)# 传的是 answer(),那么这个函数将会先运行,之后传进去
的只是函数的
# 返回值,这样, run_func 这个函数接收到的将是一个
None ,之后就# 会报错
run_func(answer())
# 传递给使用它的函数时,传的是 None ,所以报错了
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in run_func
TypeError: 'NoneType' object is not callable

函数可以返回任意数量和任何类型的数据,当然也包括某一个函数的本身

内部函数


内部函数有时也叫做函数的嵌套,就是在一个函数的内部再定义另一个函数

三种命名空间之间的加载顺序


局部使用:局部名称空间 ——>全局名称空间——>内置名称空

全局使用:全局 ——>内置

作用域
作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关
global 关键字
global 声明一个变量为全局变量
x = 1
def f1():
# global x
x = x + 2
print(x)
print(x)
f1()
print(x)

闭包函数


是另一个函数动态生成的函数,并且返回一个包含了外部作用
域而非全局作用域的函数。这个函数可以使用外部作用域的变量。

def outer(arg):
def inner():
tpl = '我是闭包函数,我在使用外部命名空间的
变量 :{}'
return tpl.format(arg)
return inner
f1 = outer("Im's outer arg")
f1()

装饰器


def decorator(func):
def wrapper():
print("*" * 16)
func()
print("*" * 16)
return wrapper
@decorator # python 语法糖
def inner():
print(" 千锋教育")
print("
www.qfedu.com")
inner()

装饰器器流程分析


@decorator
# 1. 执行装饰器器本身,同时把被装饰的函数作为实参传递进装饰器器函数中,此时也一定先定义了被装饰的函数了
# 2. 执行装饰器器函数过程中,定义了一个闭包函数 wrapper
# 3. 返回 闭包函数 wrapper
# 4. 把闭包函数 wrapper 赋值给 inner 这个变量,此时装饰器器函数执行完毕

----------------- 以上是装饰器器做的事 --------------------
# 5. 执行随后的代码 inner, 此时 inner 已不不是从前的
inner 了,是 wrapper。
# 6. 执行 第一个 print
# 7. 随后执行 原来的 inner 函数的内容
# 8. 最后执行 最后的 print

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值