1、函数定义与调用
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
语法:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
例如:
# 定义函数
def printme(str):
"打印任何传入的字符串"
print(str)
return
# 调用函数
printme("调用用户自定义函数")
输出结果:
调用用户自定义函数
2、参数传递
在Python中,类型属于对象,变量是没有类型的,她仅仅是一个对象的引用(一个指针)。例如:
a = [1, 2, 3]
a = "Runoob"
以上代码中,[1,2,3]是List类型,"Runoob"是String类型,而变量a是没有类型,她仅仅是一个对象的引用(一个指针),可以是List类型对象,也可以指向String类型对象。
Python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
在Python中,strings、tuples(元组)和numbers是不可更改的对象,而list和dict等则是可以修改的对象。
传不可变对象实例:
def ChangeInt(a):
a = 10
b = 2
ChangeInt(b)
print(b)
输出结果:
2
实例中有int对象2,指向它的变量是b,在传递给ChangeInt函数时,按传值的方式复制了变量b,a和b都指向了同一个Int对象,在a=10时,则新生成一个int值对象10,并让a指向它。
传可变对象实例:
def ChangeList(list):
list.append(40)
list = [10, 20, 30]
print(list)
ChangeList(list)
print(list)
输出结果:
[10, 20, 30]
[10, 20, 30, 40]
3、参数
以下是调用函数时可使用的正式参数类型:必备参数、关键字参数、默认参数和不定长参数。
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。不然会出现语法错误。
例如:
def printme(str):
print(str)
printme("aaa")
输出结果:
aaa
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。例如:
def printme(name, age):
print(name)
print(age)
printme(age=18, name="Diana")
输出结果:
Diana
18
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。例如:
def printme(name, age = 0):
print(name)
print(age)
printme(name="Jerry")
输出结果:
Jerry
0
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数。例如:
def printme(arg1, *vartuple):
print(arg1)
for var in vartuple:
print(var)
printme(10);
printme(70, 60, 50);
输出结果:
10
70
60
50
4、匿名函数
Python使用lambda来创建匿名函数。
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
例如:
sum = lambda a, b: a + b
print(sum(10, 20))
输出结果:
30
5、return语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。例如:
def sum(a, b):
total = a + b
return total
total = sum(10, 20)
print(total)
输出结果:
30
5、全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。