文章目录

  • 一、前言
  • 二、知识点
  • 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语句都放在开头