今天让我们来初步了解一下Python中的函数吧。
函数在每个语言中都是非常重要的,因为随着工程的扩大,所要面对的代码也会是成千上万,减少无用重复代码,会给程序员带来更高效的便利,这时就能体现函数的作用了。
函数有三个特点:
1.减少代码的重复,提高效率
2.保持整个项目代码的一致性,降低出错率
3.提高程序的扩展性,添加或减少功能都变得更方便
函数的定义和使用:
在Python中定义函数,需要使用 def 标识符来定义函数,然后依次写出函数名,括号,括号中的参数和冒号:
看实例:
def func1(x):
"Let the numbers add one"
x = x+1
return x
里面func1为函数名,x为函数的参数“Let the numbers add one” 是函数的介绍,介绍内容可加可不加,但建议以后自己能加上最好,这个简单函数的作用就是返回一个x+1的数,然后用return 返回此数字。
从上面的例子就可看出Python的函数定义非常简单,可灵活性也非常大
如函数可分为有返回值,多返回值或无返回值
参数有固位置参数,默认参数,参数组类型,和字典形式的参数
以下我们再来细细详解:
1.返回类型:
Python不像Java或者c++一样,必须有固定的返回类型:
#函数
def func1(x):
"Let the numbers add one"
x = x+1
return x
#过程函数
def func2():
"printf world!"
print("This is a progress")
无返回类型也有人叫做过程函数,只着重过程,不用在意返回类型。
2.参数类型:
1.位置参数
def power(x,y):
return x * y
对于这个函数来说,x和y就是该函数的位置参数。
print(power(5,10))
#结果:
# 50
默认参数就是你定义函数时事先给该参数填写上数值,当你在使用函数时,如果没有给该值赋值,则会使用你默认给该参数的值。
例子:
def fuc3(x,z=100):
y = z -x
return y
print(fuc3(10))
print(fuc3(10,200))
结果: 90
190
由上面例子可以得出,当我们不赋值时,z就会使用我们一开始给他定义的100,当我们给第二个参数填上200时,
Python就会自动优先的使用我们赋予的新值。
所以说默认参数也是可以给我们减少重复代码的好方法
注:还有一个需要注意的是,但我们参数含有位置参数和默认参数时,默认参数永远都要放在最后面,不然系统会出现错误
3.参数组类型
有时候往往会出现一种情况,有时候我们需要函数接受多个数量不定,且形式未知的参数,这时候我们就不能再
使用位置参数或者默认参数了,而是需要定义参数组类型的函数参数了。
使用的方法就是在定义参数时,在前面添加一个‘ * ’符号
作用:能接受N个位置参数,并将他们转换为元组的参数
例子:
def getposition(*args):
print("locatain : ",args)
getposition("e","s","w","n")
getposition(*("e","s","w","n"))
结果:
locatain : ('e', 's', 'w', 'n')
locatain : ('e', 's', 'w', 'n')
其实使用参数组,实际上是把参数变成元组的形式,然后再传递给函数由上面可得,使用这种函数,有两种输入参数的方法,相比与第一种,我更推荐第二种方法,因为这样更加简洁易懂,而且当出现多种类型的参数时,也能减少错误
4.字典类型
此外,Python还提供了添加字典参数的功能,使用的方法跟第三个类型类似,就是在参数前添加“ ** ”标识符例子:
def test2(**kwargs):
print(kwargs)
test2(name="wiiknow",age="21",sex='male')
test2(**{"name":"wiiknow","age":8})
结果:
{'name': 'wiiknow', 'age': '21', 'sex': 'male'}
{'name': 'wiiknow', 'age': 8}
所以,其实字典类型特点就是能接受N个关键字参数,并将他们转换为字典的形式再传给函数
而关于填写参数,如果只有一个类型的话,我推荐第一种,而如果涉及多个类型参数,则第二种更简单明了
且不容易出错!
参数内的调用方式:
def test2(**kwargs):
print(kwargs)
print(kwargs["name"])
print(kwargs["age"])
test2(name="wiiknow",age="21",sex='male')
test2(**{"name":"wiiknow","age":8})
结果:
{'name': 'wiiknow', 'age': '21', 'sex': 'male'}
wiiknow
21
{'name': 'wiiknow', 'age': 8}
wiiknow
8
5.类型混用
这是我自己总结的最后一个类型,因为以后的实际项目中,不可能只会出现一个类型的参数,带有两个或多个类型参数的函数都会是正常的。
所以若是需要定义多个参数类型的函数,就需要处理好优先级的问题,不然Python就会出现报错的问题:
而大概的优先级就是这样:
位置参数<默认参数<多个位置参数(参数组类型)<关键字参数(字典类型)
例子:
def test3(x,sex="male",*args,**kwargs):
print("x : ",x)
print("sex = ",sex)
print("arge:",args)
print("kwarge:",kwargs)
test3("my name",*("test1","test2"),**{"name":"wiiknow","age":21})
结果:
x : my name
sex = test1
arge: ('test2',)
kwarge: {'name': 'wiiknow', 'age': 21}
![得意](http://static.blog.csdn.net/xheditor/xheditor_emot/default/proud.gif)