【Python】第四章 函数

本文详细介绍了Python中的函数概念,包括参数传递、默认参数、不定长参数、关键字参数以及函数重载。此外,还探讨了嵌套函数、偏函数、局部与全局变量、闭包以及修饰器的使用。通过示例展示了如何利用这些特性来增强代码的灵活性和可复用性。
摘要由CSDN通过智能技术生成

该文章内容整理自《Python编程:从入门到实践》、《流畅的Python》、以及网上各大博客

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。它能提高应用的模块性,和代码的重复利用率。当函数不使用return返回值时,函数返回None。但是在函数有异常时不推荐返回None。其一般形式为

def functionname(parameters):
   function_suite
   return [expression]

参数

参数传递
当参数为不可变类型,如整数、字符串、元组等类型时,则类似C语言的值传递,函数内部的修改不会影响到原来参数的值;当参数为可变类型,如列表,字典,类对象时,则类似C语言的引用传递,函数内部的修改会影响原来参数的值。因为 Python 中一切皆对象,所以严格意义上并不分值传递和引用传递,而是类似于C语言中的指针参数,参数本身是不可变的,不影响实参的,但是参数指向的对象则是可变的,影响实参的

默认参数
调用函数时,默认参数的值如果没有传入,则被认为是默认值。但是注意这个默认值只在模块启动时加载,后面运行时不会再加载。这意味着这个默认值不能够是一个动态变化的值。如

import datetime
import time

#def log1(msg, when=datetime.datetime.now()):
#    print('%s:%s' %(when,msg)) # 两次输出的时间一样
    
def log(msg, when=None):
    if when is None:
        when = datetime.datetime.now()
    print('%s:%s' %(when,msg))

log('hi,first')
time.sleep(1)
log('hi,second')

不定长参数
当函数需要处理比当初声明时更多的参数时,这些参数叫做不定长参数。在参数名前加上 *,则会将多出来的参数封装成一个元组。如

def printinfo(arg1, *vartuple):
    print("arg1: ", arg1)
    print(type(vartuple))
    for var in vartuple:
        print(var)

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

关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。并且,在参数名前加上 **,则会将多出来的关键字名-值对封装成字典。如

def printinfo(name, age, **kw):
    print("Name: ", name)
    print("Age ", age)
    print(type(kw))

printinfo(age=18, name="Ben",<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值