文章目录
- 一、前言
- 二、知识点
- 1、定义
- 2、传递实参
- (1)位置实参
- (2)关键字实参
- (3)默认值
- 3、返回值
- 4、传递列表
- (1)修改列表
- (2)禁止函数修改列表
- 5、传递任意数量的实参
- (1)*toppings
- (2)**user_info
- 6、将函数存储在模块
- (1)存储与导入
- (2)导入特定的函数
- (3)使用as给函数指定别名
- (4)使用as给模块指定别名
- (5)导入模块中所有函数
- 三、小红讲的一些小黄上没讲的。
- 四、编写规范
- 1、基于函数描述性名称,只用小写字母和下划线
- 2、每个函数要有阐述功能的注释
- 3、给形参设定默认值时,等号两边别有空格
- 4、建议每行代码长度不超过79字符
- 5、若程序或模块包含多个函数,则使用两个空行把函数分隔开,便于区分。
- 6、所有import语句都放在开头
一、前言
感觉这一部分(其实从正则表达式就开始了)《Python从入门到精通》(之后称为小红)写得一般。有许多地方不是特别懂。于是我去看了《Python编程:从入门到实践》(之后称为小黄),讲得比较清楚。
二、知识点
1、定义
def function_name([parametersvalue1][,...][,parametersvaluen]):
expression
与C类似,但比C简单许多。
2、传递实参
(1)位置实参
按照定义时候形参的顺序匹配实参。
所以顺序很重要
(2)关键字实参
将实参和 形参的名字 匹配起来,就不需要在乎顺序了。
如
def name(last,first)
print(first+' '+last)
引用的时候就可以
name(first='xxx',last='qqq')
输出
xxx qqq
(3)默认值
可以设定形参的默认值,若不传递实参,则此形参取设定的默认值。
注意:使用默认值时,形参列表里必须先列出没有默认值的形参,把有默认值的形参放最后。
3、返回值
在函数末尾加return
可以返回字典等
4、传递列表
实参是列表即可把列表传递给形参
(1)修改列表
在函数中对列表的修改是永久的
也就是说,在函数中列表被修改后,函数外调用列表的时候,是修改后的列表了。
如
def print_name(name):
while name:
print_complet=name.pop()
print(print_complet)
name=['213','qwe','asd']
print_name(name)
print(name)
asd
qwe
213
[]
(2)禁止函数修改列表
为了防止(1)中函数把原列表修改了,我们可以用切片的方式做一个原列表的备份当作实参传递过去。
如用print_name(name[:])
5、传递任意数量的实参
(1)*toppings
def make_pizza(*toppings):
expression
*topping创建一个名为topping的空元组,并用把收集到的实参存入元组。
若结合位置实参和任意数量实参,则接纳任意数量实参的形参需要在形参表的最后。
(2)**user_info
创建一个名为user_info的空字典,把传递到的名-值存进去。
def build_profile(first,last,**user_info):
profile={}
profile['first']=first
profile['last']=last
for key,value in user_info.items():
profile[key]=value
return profile
m=build_profile('zhi','bo',location='China',age=99999) #注意,key不需要加引号!!
print(m)
输出
{‘first’: ‘zhi’, ‘last’: ‘bo’, ‘location’: ‘China’, ‘age’: 99999}
6、将函数存储在模块
(1)存储与导入
模块是一个.py文件,包含要导入到程序的代码。假设这个模块的文件名叫mokuai.py,那么若我们编程的文件(假设是b.py)与mokuai,py在同一目录下时,可以在b.py开头输入import mokuai
就相当于把mokuai.py里的所有代码导入了b.py
若mokuai.py里代码为
def pizza(food1,food2):
print(food1,food2)
在b.py中想使用模块里的函数,则需要import mokuai
并在使用时加上mokuai.
如
import mokuai
a='vegetable'
b='tomato'
mokuai.pizza(a,b)
输出
vegetable tomato
(2)导入特定的函数
可以不把一个模块里的全部函数导入,只导入特定的。
代码为:
from mokuai import function_name
这样导入的函数不需要加mokuai.
(3)使用as给函数指定别名
导入的函数名称太长或与现有名称冲突,则可以用as来指定别名。
如from pizza import make_pizza as mp
之后引用make_pizza()时只用mp()即可
(4)使用as给模块指定别名
import mokuai as m
使用mokuai里的函数时只需要m.pizza(xxx)
即可
(5)导入模块中所有函数
建议少用from mokuai import *
这样导入的函数也不需要加mokuai.
但模块里的函数可能跟程序里的名称重名。
三、小红讲的一些小黄上没讲的。
1、变量的作用域
(1)在函数内部定义的变量,函数结束后就无了。除非用global定义,则在函数外也存在。
如
def f_demo():
message=1
f_demo()
print(message)
会报错
而
def f_demo():
global message
message=1
f_demo()
print(message)
输出
1
(2)函数外部定义的变量,一直都可以用。
实际开发时,不建议局部变量与全局变量重名
2、默认参数必须指向不可变对象
3、匿名函数
(并没太看懂用途)
四、编写规范
1、基于函数描述性名称,只用小写字母和下划线
2、每个函数要有阐述功能的注释
3、给形参设定默认值时,等号两边别有空格
4、建议每行代码长度不超过79字符
如形参过多,可以在定义函数时,输完“(”后按下回车,再按TAB使光标到达缩进两次的位置从而和只缩进一次的函数体区分开。
如
def function_name(
parameter_0,parameter_1,parameter_2,
parameter_3,parameter_4,parameter_5):
expression
5、若程序或模块包含多个函数,则使用两个空行把函数分隔开,便于区分。
6、所有import语句都放在开头