提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。
Python的函数和Scala的函数很像,语法很简单,注意点如下
bash
1、函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2、任何传入参数必须放在圆括号中间,圆括号之间可以用于定义参数。
3、函数的第一行语句可以选择性地使用文档字符串---用于存放函数说明。
4、函数内容以冒号起始,并且缩进。
5、return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
例如:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
Python的函数其实在开发中,有一些会迷茫的点,这里我总结起来给大家说一下
1、函数的参数有多种写法,后面我会给大家罗列知识点,不过要知道Python的变量是一种弱检查,说白了就和js一样,名称只是数据的引用,而不会有类型的限制,所以导致大家书写的时候可能会很别扭
2、在Python中,函数必须先定义在调用,不能像c++那样声明函数
3、对于Python来说,同样遵行形参和传参的准则,但是Python更加详细的区分了值传递和地址传递,其中字符串、元组 和 数值是不可更改的对象,也就是我们常识的值传递,而列表、字典这些容器则是可以修改的对象,也就是地址传递,集合和布尔是两个特殊的数据类型不在考虑范围内
Python函数的参数,也有不同的叫法。
一、必备参数
必备参数就是我们常用的那种,写在参数位中,且对于方法体必不可少的参数
bash
可写函数说明
def printme( str ):
print str
调用printme函数
printme()
上面这个例子中没有传递必备参数str,所有执行的时候会报错
Traceback (most recent call last):
File "test.py", line 11, in <module>
printme()
TypeError: printme() takes exactly 1 argument (0 given)
二、关键字参数
关键字参数,是指Python允许通过形参名称指定传入参数,忽略列常规写法中的顺序概念
bash
def printme( str , index) :
print str
#调用printme函数
printme(index = 1 , str = 'My Tom')
三、默认参数
默认参数,是指该参数拥有默认值,使得该参数可以不用传递
bash
def printme( str , index = 1) :
print str
#调用printme函数
printme(str = 'My Tom')
四、不定长参数
不定长参数,说的其实就是可变参,底层原理是一个容器,可变参定义的时候由星号开头
bash
def printinfo( *vartuple ):
for var in vartuple:
print var
# 调用printinfo 函数
printinfo( 70, 60, 50 )
不过在Python开发中大家可能会见到两个星号开头的参数,其实这个也叫可变参,只不过底层的实现容器不一样
一个星号的时候是普通的可变参,它的底层实现是一个元组
bash
def printinfo( *vartuple ):
print vartuple
# 调用printinfo 函数
printinfo( 70, 60 )
结果:(70, 60)
两个星号的时候叫做含关键字的可变参,它的底层是字典
bash
def printinfo( **vartuple ):
print vartuple
# 调用printinfo 函数
printinfo( name=70, age=60 )
结果:{'age': 60, 'name': 70}
除了常规的函数,Python也支持默认函数,原理是lambda表达式
bash
sum = lambda arg1, arg2: arg1 + arg2
print(sum(1,1)) ---输出2
Python也可以写递归函数,不过我这里就不写了,毕竟递归大家都知道是怎么回事,函数调用自身而已
同时Python函数的返回值任然是return关键字
bash
def sum( arg1, arg2 ):
return arg1+arg2
# 调用sum函数
total = sum( 10, 20 )
print(total)
Python的返回值还支持拆包操作,就是返回多个返回值
bash
def num():
return 100 , 200
# 调用printinfo 函数
num1 , num2 = num()
print(num1)
print(num2)
这里针对拆包说一句题外话,拆包不止可以作用在返回值上,还可以在平常操作中进行,必须我们写for循环遍历字典的时候遍历用的变量有两个,那就是一种拆包操作
不过对于字典我们其实可以直接拆包
bash
a = {"name" : "Tom" , "age" : 12}
b , c = a
print(b) ---key
print(c)
print(a[b]) ---value
print(a[c])
当然与函数相关联的局部变量、全局变量的概念我相信大家都知道,我这里就不给大家解释了,给大家准备了一个例子
bash
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2 # total在这里是局部变量.
print "函数内是局部变量 : ", total
return total
#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total