5.python入门-函数

5.1 函数的定义和调用

1.函数的定义

函数是为了解把会重复使用的代码定义成一个对象,在复用的时候可直接调用。

  • def 函数名(形参) 函数名的命名等同变量命名规则。
  • 函数执行的代码以冒号起始,并且缩进。
  • return函数终止执行,并返回结果,没有return返回None。
def func(n1):   # 函数执行的代码以冒号起始,并且缩进。
		"函数_文档字符串"   # 函数说明文档
        return n1+10,n1  # 返回值可以是任意类型,如有逗号,会转换成元组
        print(n1)     # 遇到return就会立即退出函数(在循环中也会终止函数)
func(10)              # return结果需要传递给变量
res = func(10)    
print(res)             # (20, 10)

2. 函数名调用

  • 调用过程中会执行print,如有return返结果。没有默认是None。
  • help ,查看说明文档。
def func(n1):
        print(n1+10)     # print在函数调用执行过程中输出内容
        print(n1)        
res = func(10)           # 调用函数,会执行打印
print(res)               # 如果函数中没写return,则默认返回None
  • 函数名是可哈希的,可作为集合元素或字典的键等。
  • 函数赋值给一个变量后,这个变量也具有了此函数的功能
def func():
    return 123
cond_dict = {
   "函数":func} 
num = cond_dict['函数']  
num() # 123
  • 函数名也可当成对象,从另一个函数中返回出来而去构建高阶函数,比如:参数是函数、返回值是函数。
  1. 函数名做另一个函数的参数

def plus(num):
    return num + 100

def handler(func):
    res = func(10) # 110
    msg = "执行func,并获取到的结果为:{}".format(res)
    print(msg)  # 执行func,并获取到的结果为:110
    
# 执行handler函数,将plus作为参数传递给handler的形式参数func
handler(plus)
  1. 函数名做另一个函数的返回值
def plus(num):
    print(num + 100)

def handler():
    print("执行handler函数")
    return plus

result = handler()
data = result(20)  # 120
print(data)
  1. 同时为参数和返回值
def f1():
    print(123)

def f2(arg):
    ret = arg()
    return f1

v1 = f2(f1)   # 在return之前先运行了f1,所以过程中打印了123

v2 = v1()  # f2 返回f1 所以v2现在指向f1()
print(v2) 

3. 函数修饰器

  • 函数修饰器是一种特殊的语法,用于在不修改原始函数定义的情况下,通过@函数修改或增强函数的行为。(批量操作会更有意义)
  • 修饰器本身是一个函数,它接收一个函数对象作为参数,并返回一个新的函数对象或一个可调用对象。
  • 修饰器以 @ 符号开头写在函数定义的上方,多个修饰器可以叠加使用。
def my_decorator(func):
    def wrapper():
        print("Before the function is called.")
        func()
        print("After the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()
say_hello.__name__  # 'wrapper'
  • functools.wraps能 传递.__name__和.doc
import functools

def outer(origin):
    @functools.wraps(origin)   # 传递函数名称和注释
    def inner(*args, **kwargs):
		# 执行前需执行的代码
        res = origin(*args, **kwargs)  # 调用原来的func函数
        # 执行完成需执行的代码
        return res
    return inner


@outer  # func = outer(func) 
def func():
    pass

func.__name__    #  func

5.2 函数的参数

Python 的函数具有非常灵活多样的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。从简到繁的参数形态如下:
形参与实参:当一个函数被调用时,实参的值被赋给对应的形参,并作为函数内部变量来使用。

def greet(name):
    print("Hello, " + name + "!")

greet("Alice")

在这个例子中,name 是 greet() 函数的形参,而 “Alice” 是传递给函数的实参。当函数被调用时,“Alice” 被赋值给 name,并在函数体内输出 “Hello, Alice!”。

1. 位置参数

  • 按照顺序依次传递的参数,在函数内部可以通过对应的参数名来访问。
  • 位置传参的实参个数不多不少,依次传参。

2. 关键字参数

用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用。
Python 允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

  • 通过名称来指定传递给函数的参数,不需要按照定义顺序传递。
  • 可以和位置参数混合使用,但必须在位置参数之后。
def print_hello(name,age,sex):
   print('Name:%s Age:%d Sex:%s' %(name,age,sex))
print_hello('male',19,'lili')          # Name:male Age:19 Sex:lili
print_hello('lili',sex='male',age=18)  # Name:lili Age:18 Sex:male 

3. 默认参数

  • 用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值,如果不传就取定义时候的值,传了改变为新的值.
  • 默认参数的值通常应设为不可变类型。默认值是可变类型时,执行函数会修改默认值。
def print_hello(name,age,sex = '女' ):
#sex = '女' 为默认参数
   print('Name:%s Age:%s Sex:%s' %(name,age,sex))
print_hello('Muse',26,'男')

4. 可变长度的参数

  1. 可变长度的位置参数
    在位置参数的最后一个形参名前加*,溢出的位置参数都会被接收,以元组的形式保存下来赋值给该形参
def foo(x,z=1,*args): #在最后一个形参名args前加*号
    print(x,z,args)
foo(1)        # 1 1 ()
foo(1,2)      # 1 2 ()
foo(1,2,3)  # 1 2 (3, )
  1. 可变长度的关键字参数
  • 在最后一个形参名前面加**,调用函数时,溢出的关键字参数都会被接收,以字典的形式保存下来赋值给该形参。
  • 多个形参时,顺序必须是:位置参数、默认参数和可变位置参数、关键字参数。
def func
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值