python学习笔记12--函数

本文详细介绍了Python中的函数定义、参数类型及传递方式、变量作用域等内容,帮助读者更好地理解和使用Python函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 函数定义

python中也可以定义函数,一方面功能可以重用,另一方面也便于阅读,python中的函数定义方法为:

def function_name (arguments):

     function_body

python中的函数可以有返回值,也可以没有返回值,调用的时候给出函数名和实参即可。

如果定义时,参数形式为def function_name(arg1=1, arg2=2)这种,则表示函数有默认参数值,如果调用时不提供参数,则函数执行时采用默认参数值。要注意的是,如果混合默认参数和非默认参数,则非默认参数一定要在默认参数前声明,如def function_name(arg1=1,arg2)是错误的。

2. 参数

参数有位置参数(positional argument)和关键字参数(keyword argument)两种形式:位置参数是根据函数定义时的参数顺序来传递参数;关键字参数是在传递参数时写明每一个参数的关键字,并不一定按照函数定义时的顺序。举个例子:

def func(a1,a2,a3):
    return a1 + a2 - a3

r1 = func(1,2,3)           # positional arg
r2 = func(a2=2,a3=3,a1=1)  # keyword arg
r3 = func(1,a3=3,a2=2)     # mixed arg
r4 = func(a1=1,3,2)        # wrong, SyntaxError:non-keyword arg after keyword arg
其中r1的调用是根据参数的默认位置来传递实参;r2的调用是根据关键字来传递实参;r3的调用是混合了位置参数和关键字参数,这种调用方式的原则是位置参数不能出现在关键字参数后面,比如r4的调用就会返回符号错误:non-keyword arg after keyword arg。

3. 参数的值传递

在python中,当调用一个函数,并传递一些参数时,每个参数的引用是通过值传递,而不是变量的传递。因为在python中,所有的数据都是以对象形式存在,一个变量实际上是对象的引用。举个例子:

x = 2
y = x
print (id(x))   # 168763556
print (id(y))   # 168763556
y = x + 1
print (id(y))   # 168763544
可以看出,在y加1前,y和x的id都是168763556(与运行环境有关),而执行y=x+1后,y的id改变了。说明不管是变量x还是变量y,它都指向一个对象,这个对象就是2,一旦创建了一个变量v并赋值a,python就会为这个值a创建一个对象o,并将o的引用分配给变量v;执行y=x+1后,y=3,python就为3创建了一个对象,并将3的引用分配给y。(值得注意的是,python中的数字和字符串都是不可改变对象,一旦创建不能修改其值)。

有了这个认识,再看另一个小例子:

def f():
    x = 1
    print (x)     #1
    increment(x)
    print (x)     #1

def increment(n):
    n = n + 1
    print (n)     #2
print的结果如右边注释所示,可以看出,调用increment(x)后,x的值并为改变,因为传进的参数是值1,并不是变量x。

4. 变量的作用域

python中也存在局部变量和全局变量的概念,局部变量只在函数体内作用,全局变量则在全局范围内作用。如:

x = 1
def increase1():
    x = 2
    print (x)   # 2

increase1()
print (x)       # 1

但是,可以在函数体内用global关键字,来将函数体内的局部变量绑定为全局变量,如:

x = 1
def increase2():
    global x
    x = x + 1
    print (x)   # 2

increase2()
print (x)       # 2

这样一来,函数内部的x也变成了全局变量,所以修改它也会在全局变量x中反映出来;不过,这种方式并不提倡使用,因为可能会使得代码不易阅读和维护。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值