Python函数详解一(函数参数、变量作用域)

时间:2022-07-28
本文章向大家介绍Python函数详解一(函数参数、变量作用域),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Python函数

函数是python程序的重要组成部分。所谓函数就是实现某一特定功能的代码段,可重复使用,提高了代码的利用率。

python除了可以直接使用内置函数,还支持自定义函数。

定义函数

使用 def 关键字,格式如下:

def函数名(参数列表):
函数体

函数的返回值

函数的返回值用return语句返回,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。

如果没有返回值,函数执行完毕后也会返回结果,只是结果为None。

函数参数详解

1.位置参数:

调用的时候必须传值,有几个就按顺序传几个值

示例

def area(length, width):
    return 2 * (length + width)

# 调用函数时,必须传递2个参数,否则会引发错误
print(area(10,3))

2.默认参数:

定义时给出默认值,调用的时候可以不传参,使用默认值

默认参数好处是:如果一个函数有20多个参数,如果使用默认参数,在调用的时候只需要传递某些参数(注意传参数名)就可以了。

示例

def student(name,age=10,city="Beijing"):
    print("姓名:{},年龄:{},城市:{}".format(name,age,city))

#调用方式一:
student("赵四")
#调用方式二:
student("张三",15,"Shanghai")
#调用方式三:
student("李明",12)
#调用方式四:
student("李明",city="Tianjin")

1.既有位置参数又有默认参数,位置参数在前,默认参数在后。

2.多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。 当不按顺序提供部分默认参数时,需要传入参数名(见调用方式四)。

3.可变参数:

可以传入任意个参数,传入的参数被组装为一个tuple。

示例

def sum(*num):
    sum=0
    for i in num:
        sum=sum+i
    return sum

#调用方式一:
sum(1,2,3)
# 调用方式二:
num = [1,2,3]
sum(*num)

4.关键字参数:

传入任意个含参数名的参数,这些关键字参数被组装为一个dict。

示例

def person(**kw):
    for key in kw:
        print("{}:{}".format(key,kw[key]))

# 调用方式一:
person(name="John",age=15)
# 调用方式二:
p={"name":"Alice","city":"Beijing"}
person(**p)

5.命名关键字参数:

对于关键字参数,函数调用的时候可以传入任意个不受参数名限制的关键字参数。但如果想必须传入某个名字的关键字参数,就可以用命名关键字参数。如上例中的person()函数,如果必须传入名为age的关键字参数,可以写成如下形式:

def person(name, *, age):
    print("name={},age={}".format(name,age))

# 调用方式:
person("John", age=15)

命名关键字参数又和位置参数不同,命名关键字参数必须传入参数名。如果没有传入参数名,调用将报错。如果上面例子的调用方式写成 person("John", 15) 将报错

如果既有可变参数,又有命名关键字参数,参数顺序为:可变参数,命名关键字参数,并且命名关键字参数前不需*

def person(name, *args, age):
    print(name,args,age)

python中五种参数可以组合使用,参数的定义顺序必须是:位置参数、默认参数、可变参数、命名关键字参数和关键字参数。

变量的作用域

局部变量

局部变量:在函数中定义的变量,只在函数内部起作用。

如果想让局部变量在函数外起作用,要声明为全局变量,需要使用global关键字来声明。

全局变量

全局变量:在模块层次中定义的变量,作用范围在整个模块。

1.全局变量的作用范围仅限于单个模块文件内。

2.如果函数内定义的局部变量和全局变量同名,函数在使用该变量的时候会优先使用局部变量。

示例

先定义一个全局变量,由于函数内部没有定义同名变量,所以调用的时候使用的是全局变量的值

var=123    #全局变量
def func():
    print(var)
# 调用函数
func()    #123

现在在函数内部定义一个同名变量,可以看到函数在调用的时候优先使用的是自己内部的变量,而在函数外部使用的是全局变量的值

var=123#全局变量
def func():
var=45#局部变量
print(var)
# 调用函数
func()    #45

print(var)    #123

现在我们把函数内的变量声明为全局变量,可以看到变量var在函数外部也起作用了

def func():
global var
var=45#局部变量
print(var)
# 调用函数
func()    #45
print(var)    #45