python3基础函数

avatar 2020年4月7日18:06:04 评论 1,310 次浏览

函数的了解

首先,我们要了解函数是什么,在python3开发的过程中使用函数有什么意义。其次,函数的好处给我们的程序带来什么好处?函数和方法有什么区别等等。不懂没关系,我们一点一点的了解。先了解一下什么是函数。在python中,一切皆是对象,函数也是对象,函数的作用就是不在使用重复的代码,利用函数的参数可以重复使用函数的功能。举例例子:我们计算一下两个整数的和,只需要传入两个整数参数即可,调用一下函数就会返回两个参数的和。看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~

def num(wulaoer,wolf):
    wulaoer += wolf
    return wulaoer

wulaoer = 23
wolf = 27
print("两个整数的和为:",num(wulaoer,wolf))

输出结果:

两个整数的和为: 50

两个变量和随意取,变量的值这里没有做一个整数判断,所以如果是浮点数也是可以的,只要把变量名传到函数中就会计算两个变量的和,下面尝试一下,修改一下变量名和变量的值。

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~

def num(wulaoer,wolf):
    wulaoer += wolf
    return wulaoer

wu = 23.8
laoer = 27.2
print("两个整数的和为:",num(wu,laoer))

输出结果:

两个整数的和为: 51.0

传入的是浮点数,返回的也是一个浮点数。所以,函数的作用就是调用频频的相同功能。这里要注意,函数名必须是del开头,不建议使用大写。因为在python中,python的类是实用的大写,为了规范,不建议函数大写。在函数的最后一行有一个return,就是结束函数,返回一个函数的值,如果我们不加return,调用函数返回为None,看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~

def num(wulaoer,wolf):
    wulaoer += wolf
    print(wulaoer)

wu = 23.8
laoer = 27.2
print("两个整数的和为:",num(wu,laoer))

输出结果:

51.0
两个整数的和为: None

这时,我们调用的函数num已经不在是一个值,而是一个None,返回的值没有赋值给函数。这个时候如果我们还需要利用这个函数取调用其他的函数时,这个函数就不能作为一个参数传入到新的函数中进行调用了。在举个例子,上面已经创建了一个两个数和的函数,我们在创建一个函数,乘以2,这时,我们把num函数作为一个参数,放到新的函数中,看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~

def num(wulaoer,wolf):
    wulaoer += wolf
    print(wulaoer)
    return wulaoer

def area(laoer):
    laoer = laoer * 2
    return laoer

wu = 23.8
laoer = 27.2
print("两个整数的和为:",num(wu,laoer))
print("整数和乘以2",area(num(wu,laoer)))

输出结果:

51.0
两个整数的和为: 51.0
51.0
整数和乘以2 102.0

如果我们把num函数的renturn注释掉,看一下会有什么错误。

51.0
两个整数的和为: None
51.0
Traceback (most recent call last):
  File "/path/wulaoer.py", line 17, in <module>
    print("整数和乘以2",area(num(wu,laoer)))
  File "/path/wulaoer.py", line 11, in area
    laoer = laoer * 2
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

这里的提示已经很明显了,所以建议如果定义的函数如果还需要调用,就需要实用return进行结束函数,这个是习惯。

函数的参数

上面已经了解了什么是函数,我们也举了几个函数的例子,我们应该发现,上面的例子中,我们调用的函数都需要传入一个参数进去的,在传入的参数中,我们使用了参数,这是我们知道传入的参数是几个,如果我们传入多个参数,或者不传参数,又会怎么样?所以python给函数做了几种不同传参方式,分别是:必要传参,关键字传参,默认传参,不定长传参等。

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~

def num(wulaoer,wolf):
    wulaoer += wolf
    print(wulaoer)
    return wulaoer

wu = 23.8
laoer = 27.2
print("两个整数的和为:",num())

输出结果:

Traceback (most recent call last):
  File "/path/wulaoer.py", line 12, in <module>
    print("两个整数的和为:",num())
TypeError: num() missing 2 required positional arguments: 'wulaoer' and 'wolf'

提示的大概意思也能看明白了,在调用的时候没有传参数。

关键字传参:关键字传参就是在传入参数的时候,函数需要使用参数的值进行计算,比如上面的求和函数。传入的参数顺序和调用的顺序可以颠倒,不过不太建议,如果有需要使用的时候也可以这样使用,看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
def wulaoer(wulaoer,wolf):
    print("网站名称:",wulaoer)
    print("网站年来:",wolf)

wulaoer(wolf=0.8,wulaoer="www.wulaoer.org")

输出结果:

网站名称: www.wulaoer.org
网站年来: 0.8

之所以传参的变量位置变化之后,打印的参数不变,是因为在调用函数的时候,定义的参数名字和调用的参数名字一样,如果我们使用调用函数参数和定义函数的参数名不一样时,函数就会根据定义的函数顺序进行打印函数的变量。两者不一样,所以在调用函数时已经函数传参时,尽量顺序一致。

默认传参:就是函数创建时,已经定义了默认参数,如果在调用函数时,不传默认参数的变量,函数会使用默认的参数。看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
def wulaoer(wulaoer, wolf = 0.9 ):
    print ("网站名称:",wulaoer)
    print ("网站年来:", wolf)

wulaoer(wulaoer="www.wulaoer.org")

输出结果:

网站名称: www.wulaoer.org
网站年来: 0.9

传入一个参数的时候,会自动使用默认参数,这里注意,如果传入的一个参数名称不是wulaoer,就是其他的任何一个变量名的参数,都会自动把定义的默认参数添加到函数中,如果不想使用默认参数,就需要在申明的变量中赋值后加到调用的函数中,这样就会覆盖掉原来的参数。

不定长传参:意思时传入的参数,个数不确定,有可能是传一个参数,也有可能是传两个参数,也可能是传三个参数。先下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
def wulaoers(wulaoer, *var ):
    print ("网站名称:",wulaoer)
    print ("网站年来:", var)
wulaoer="www.wulaoer.org"
wolf = 27
python3 = 3
devops = 8

wulaoers(wulaoer,wolf,python3,devops)

输出结果:

网站名称: www.wulaoer.org
网站年来: (27, 3, 8)

第一个参数自动加到函数中调用的变量中,不过后面的*var变量是多个参数,这里定义的多个参数都传到函数中打印出来的是一个tuple(元组),在传参数的时候不能在调用函数的时候赋值,不然会报错,如下:

wulaoers(wul,wolf=2,python3=2,devops=2)

输出结果:

Traceback (most recent call last):
  File "/path/wulaoer.py", line 29, in <module>
    wulaoers(wul,wolf=2,python3=2,devops=2)
TypeError: wulaoers() got an unexpected keyword argument 'wolf'

如果想在调用函数的时候也把参数传入进去,就需要实用两个*,这样调用**var,看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
def wulaoers(wulaoer, **var ):
    print ("网站名称:",wulaoer)
    print ("网站年来:", var)
wul="www.wulaoer.org"
wolf = 27
python3 = 3
devops = 8

wulaoers(wul,wolf=27,python3=3,devops=8)

输出结果:

网站名称: www.wulaoer.org
网站年来: {'python3': 3, 'devops': 8, 'wolf': 27}

使用**var返回的是一个字典,和上面*var返回的(元组)不太一样。在参数中传入的参数可以单独使用"*",不过需要注意,"*"后面传入的参数必须使用关键字传入,看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
def wulaoers(wulaoer, wolf, *, devops ):
    print ("网站名称:",wulaoer)
    print ("网站年来:", wolf,devops)
wul="www.wulaoer.org"
wolf = 27
python3 = 3
devops = 8

wulaoers(wul,wolf,devops=8)

输出结果:

网站名称: www.wulaoer.org
网站年来: 27 8

这就是函数的基本作用和用法,函数是在以后学习的过程中会频繁的用到,所以需要多了解一下基本知识点。函数详细的划分了匿名函数,迭代函数,递归函数等等,后面会针对函数的划分详细在单独说明。这里就先把函数的基础介绍到这了。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: