最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Python函数与模块:聊聊Python函数大全

XAMPP案例 admin 939浏览 0评论

在我们尚未学习Python函数之前,程序都是自上而下依次执行这种理解是没有问题的。

如果我们需要重复使用某段代码时,是不是需要将此代码复制多次使用呢?如果这样会影响我们的开发效率、而且代码也会显得非常冗余。

这时候就需要我们的Python函数了。我们可以将一段需要重复调用的代码块封装为函数,每次使用时只需调用即可、十分方便。

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。

e0025

什么是函数

提起函数,大家都会想到数学函数吧。函数贯穿整个数学的学习。同样,Python的函数也是应用相当广泛的。
你已经知道Python提供了许多内建函数,比如输出的print()函数、输入的input()函数、生成一系列整数的range()函数。但你也可以自己创建函数。通过将一段有规律的、重复的函数定义为函数。来达到一次编写多次调用的目的。使用函数可以大大提高代码的复用率。

创建函数

创建函数即为定义一个函数。以下是简单的规则:
e00025

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

 

让我们使用函数来输出”Hello World!”:

'''
函数语法:
def 函数名(参数列表):
    函数体
'''

#定义函数
def hello():
    print('hello world!')

hello()

#hello world!
稍微复杂点的应用,函数中带上参数变量:
'''
函数语法:
def 函数名(参数列表):
    函数体
'''

#定义函数
def max(a, b):
    if a > b:
        print(a)
    else:
        print(b)

max(1, 8)

#8

函数调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

#定义一个输入什么输出什么的字符串函数
def output(str):
    print(str)
    return
#调用函数
output('我是AAAAA')
output('CCCCC')

'''
我是AAAAA
CCCCC
'''

参数传递

在调用函数时,大多数情况下,主调函数和被调函数存在数据传递关系。函数参数的作用是传递数据给函数使用。函数参数的定义是在函数名称后的花括号之内。

python中定义函数时,函数名后面的括号中如果有内容,括号里的内容称为“形参”。代码示例如下,其中name为形参:

#函数定义
def greeting(name):
    print("Hello,"+name.title()+"!")

如果函数定义时有形参,则调用这个函数时需提供实质的参数,调用时的参数称为“实参”。代码示例如下,其中“泡芙”为实参:

#函数定义
def greeting(name):
    print("Hello,"+name.title()+"!")

#函数调用
greeting('泡芙')

'''
Hello,泡芙!
'''

我们可以根据实参的类型不同,又可以分为将实参的值传递给形参;将实参的引用传递给形参两种情况。

当实参为不可变对象时进行的是值传递;

当实参为可变对象时进行的是引用传递;

e000025

这里需要给大家普及一个Python中的基础,在python中,string(字符串), tuples(元组), 和number(数值)是不可更改的对象;

而list(列表),dict(字典)等则是可以修改的对象。

 

区别在于进行值传递之后可以改变形参的值,实参的值;

引用传递既可以改变形参的值也可以改变实参的值。

#函数定义
def out(obj):
    print('原值:', obj)
    obj += obj

print('值传递------------------------')
obj = '人民有信仰,国家有力量,民族有希望!'
print('函数调用前:', obj)
out(obj)
print('函数调用后:', obj)

#引用传递
print('引用传递------------------------')
obj = ['张三','李四','王麻子']
print('函数调用前:', obj)
out(obj)
print('函数调用后:', obj)

'''
值传递------------------------
函数调用前: 人民有信仰,国家有力量,民族有希望!
原值: 人民有信仰,国家有力量,民族有希望!
函数调用后: 人民有信仰,国家有力量,民族有希望!

引用传递------------------------
函数调用前: ['张三', '李四', '王麻子']
原值: ['张三', '李四', '王麻子']
函数调用后: ['张三', '李四', '王麻子', '张三', '李四', '王麻子']
'''

 

可以很清晰地看到,进行值传递时,改变的是形参的值,实参值不变;

进行引用传递时,改变的是形参的值和实参的值。

 

位置参数

位置参数也被称为必备参数,需要注意两点:

1.参数数量必须与定义时一致。不然就会报TypeError的异常。

def add(a,b,c):
    print(a+b+c)

add(1,3)
#TypeError: add() missing 1 required positional argument: 'c'
2.参数位置必须与定义一致。若果位置异常,虽然不会抛出异常,但是会产生与预期结果不符的问题。
def person_info(name,age,sex):
    print('{}的个人信息:年龄{},性别:{}'.format(name,age,sex))

'''
person_info('张三',23,'男')
张三的个人信息:年龄23,性别:男
'''

person_info('张三','男',23)
#张三的个人信息:年龄男,性别:23
在调用参数时,传递的参数位置与形参不一致时不一定总会抛出异常。所以在调用时一定确定好位置。不然容易产生Bug,而且不容易发现。

关键字参数

关键字参数指的是使用形参的名字来确定实参的值,这样当参数很多的时候无需去专门去记各个参数的位置和顺序,使得函数的调用和参数的传递更加方便。
def person_info(name = '张三', age = 18, sex='男'):
    print('{}的个人信息:年龄{},性别:{}'.format(name,age,sex))

person_info()
'''
张三的个人信息:年龄18,性别:男
'''

默认参数

调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:

#定义printinfo函数
def printinfo(name, age=35):
    print("名字: ", name)
    print("年龄: ", age)
    return

#调用printinfo函数
printinfo(age = 42, name = "张三丰")
printinfo(name = "张无忌")
'''
名字:  张三丰
年龄:  42
名字:  张无忌
年龄:  35
'''

可变参数

可变参数也被称为不定长参数。指的是传入的实参可以是1个、2个或者多个。主要有两种形式:

*参数
**参数

第一种*形式代表接受任意多个参数并且将其放入到一个元组中,调用3次分别传入不同数量的值。

#定义你喜欢的选手参数
def likeplayer(*name):
    print('我喜欢的LOL选手是:')
    for item in name:
        print(item)

likeplayer('宋义进')
likeplayer('The shy','Rookie','泡芙')
likeplayer('The shy', '宋义进', '泡芙', 'xun', 'Ning', 'Lucas')

'''
我喜欢的LOL选手是:
宋义进

我喜欢的LOL选手是:
The shy
Rookie
泡芙

我喜欢的LOL选手是:
The shy
宋义进
泡芙
xun
Ning
Lucas
'''

若是使用一个已经存在的列表作为函数的可变参数,可在列表名称前*,如下:

#定义你喜欢的选手参数
def likeplayer(*name):
    print('我喜欢的LOL选手是:')
    for item in name:
        print(item)

name = ['The shy', '宋义进', '泡芙', 'xun', 'Ning', 'Lucas']

likeplayer(*name)
'''
我喜欢的LOL选手是:
The shy
宋义进
泡芙
xun
Ning
Luca
'''

第二种**形式表示接收任意多个参数将其存入一个字典。

#定义函数
def printinfo(arg1, **vardict):
    print(arg1)
    print(vardict)

#调用函数
printinfo(666, a = 1, b = 2, c = 3, d = 4)

'''
666
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
'''

同样若是使用一个已经存在的字典作为函数的可变参数,可在列表名称前**,如下:

#定义函数
def printinfo(arg1, **vardict):
    print(arg1)
    print(vardict)

#调用函数
dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

printinfo(888, **dict)
'''
888
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
'''

转载请注明:XAMPP中文组官网 » Python函数与模块:聊聊Python函数大全

您必须 登录 才能发表评论!