python基础-函数
1、什么是函数?
函数是实现特定功能而封装起来的一组语句块,可以被用户调用
2、函数的分类
自定义函数(用户编写);预定义函数(系统自带,lib自带)
3、为什么使用函数
降低编程难度,将大问题分解为若干小问题;代码重用,函数可被多次调用
4、函数的语法
定义:
def 函数名字(参数):
函数体
return 语句 #不带表达式的return相当于返回None
调用:
函数名字
定义函数和调用函数
函数名称最好以_分割
#定义函数 def print_me(str): print(str) return #调用函数 print_me("我要调用用户自定义函数") print_me("再次调用同一函数")
结果:
我要调用用户自定义函数
再次调用同一函数
参数传递
所有参数在python中都是按引用传递
一句话:要变都变
def change_me(mylist): mylist.append([1,2,3,4]) print("函数内取值:",mylist) return mylist = [10,20,30] change_me(mylist) print("函数外取值:",mylist)
结果:
函数内取值: [10, 20, 30, [1, 2, 3, 4]]
函数外取值: [10, 20, 30, [1, 2, 3, 4]]
关于参数的点点滴滴
def print_info(name,age = 35): print("Name:",name) print("Age:",age) return #调用函数 #关键字参数,允许函数调用时参数的顺序与声明时不一致 print_info(name='xm',age=18) print_info(age=50,name='xm') #缺省参数,缺省参数的值如果没有被传入,则被认为是默认值 print_info(name='xm')
结果:
Name: xm
Age: 18
Name: xm
Age: 50
Name: xm
Age: 35
不定长参数
可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数
基础语法:
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
*号的变量名会存放所有未命名的变量参数.选择不多传参数也可
#不定长参数 def print_info(arg1,*vartuple): print("输出:",arg1) for var in vartuple: print(var) return #调用函数 #不多传参数 print_info(10) print("\n==============\n") #多传参数 print_info(70,60,50)
结果:
输出: 10
==============
输出: 70
60
50
匿名函数
1、lambda只是一个表达,而不是一个代码块,函数体比def简单很多。仅仅能在lambda表达式中封装有限的逻辑
2、语法:
lambda [arg1][,arg2,...argn]]:expression
sum = lambda arg1,arg2:arg1+arg2
#调用sum函数
print("相加后的值:",sum(10,20))
return语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
def sum(arg1,arg2): total=arg1+arg2 print("函数内:",total) return total #改为return后,返回什么? 返回的none #调用sum函数 total=sum(10,20) print("函数外:",total)
结果:
函数内: 30
函数外: 30
变量作用域
全局变量和局部变量
1、定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域
2、局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问
total = 0#这是一个全局变量 def sum(arg1,arg2): total=arg1+arg2 #total在这里是局部变量 print("函数内是局部变量:",total) return total #调用sum函数 #total=sum(10,20) sum(10,20) print("函数外是全局变量:",total)
结果:
函数内是局部变量: 30
函数外是全局变量: 0
全局变量想作用于函数内,需加global
counter = 1 def do_st(): global counter for i in (1,2,3): counter +=1 #循环3次后,counter = 4,因为是全局变量,要更改变量的值 print(do_st()) #没有return语句,返回None print(counter) #答案是4
结果:
None
4