一、函数的定义与优势:
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
Python提供了许多内建函数,比如print(),但也可以自己创建函数,这被叫做用户自定义函数。
二、函数的定义
1.函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4.函数内容以冒号起始,并且缩进。
5.Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
return 的作用 :返回结果,结束函数运行
代码如下:
def check_num(): #输入相应数字执行相应操作
num = input('请输入你的选择:1,添加商品;2,查看商品;3,删除商品: ')
if num == '1':
add_goods() #调用函数
elif num == '2':
check_goods()
elif num == '3':
del_goods()
else:
print('输入错误,请重新输入。')
return check_num() #递归调用
三、函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,
你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
四、函数的参数
形参:定义函数时传入的参数
实参:调用函数时传入的参数
必备参数:必备参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样
命名参数:命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值
代码如下:
#!/usr/bin/python
#可写函数说明
def printinfo( name, age ):
"打印任何传入的字符串"
print "Name: ", name;
print "Age ", age;
return;
#调用printinfo函数
printinfo( age=50, name="miki" );
#以上实例输出结果:
#Name: miki
#Age 50
缺省参数:调用函数时,缺省参数的值如果没有传入,则被认为是默认值
代码如下:
#!/usr/bin/python
#可写函数说明
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print "Name: ", name;
print "Age ", age;
return;
#调用printinfo函数
printinfo( age=50, name="miki" );
printinfo( name="miki" );
#以上实例输出结果:
#Name: miki
#Age 50
#Name: miki
#Age 35
五、变量作用域
全局变量与局部变量
局部变量:定义在函数内部的变量
全局变量:定义在函数外部的变量
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中
注:全局变量如果要在函数中修改的话,需要加global关键字声明(函数中),如果是list、字典和集合的话,则不需要加global关键字,直接就可以修改。
Head first Python 函数总结:
1,函数是命名的代码块
2,def关键字用来命名函数,函数代码的def关键字下(相对def关键字)缩进
3,Python的三重引号字符串可以用例为函数增加多行注释。如果采用这种方式,它们称为docstring
4,函数可以接收任意多个命名参数,也可以没有参数
5,return语句允许函数返回任意多个值(也可以不返回任何值)
6,函数注解可以用例描述函数参数的类型以及函数的返回类型
7,任何函数参数都可以在函数的def行赋一个默认值。如果为一个参数设置了默认值,调用函数时,为这个参数指定值就是可选的
def search4letters(phrase:str,letters=:str='aeiou'):
#为letter 参数赋了一个默认值,如果调用代码没有提供替代值,就会使用这个默认值
8,除了按位置赋参数,还可以使用关键字。使用关键字,任何顺序都是可以的(因为使用关键字可以去除任何二义性,位置不再重要)
search4letters('galaxy','xyz') #位置赋值,第一个字符串赋值给phrase,第二个字符串赋值给letters
search4letters(letters='xyz',phrase='galaxy')# 关键字赋值,按参数名来引用参数