风声起,琴声动,客怎眠。
静夜澜,江南曲,心涟漪。
看尽浮沉,怅然只怕,醉梦一场。
韶华易逝,红颜一曲,明又何夕。
——孝平
什么是函数?
函数就是具备某一特定的工具
为什么用函数?
减少重复代码
增强程序的扩展性
增强可读性
如何用函数?
1.函数的使用原则:先定义后调用(*****)
定义阶段:只检测语法不执行代码
调用阶段:执行函数代码
2.定义阶段与调用阶段:
2.1:语法(******)
def func(参数1,参数2,...)
“""文档注释"""
code1
code2
return 返回值
2.2形参与实参(*****)
形参本质就是变量名
实参本质就是变量的值
形参:
位置形参
def foo(x,y):
pass
默认形参
def foo(x,y=1)
pass
*args
def foo(x,*args):
pass
**kwargs
def foo(x,**kwargs):
pass
实参:
位置实参
foo(1,2,3,4)
关键字实参
foo(x=1,y=2, z=3)
foo(x=1,1) #错误
foo(1,x=1) # 错误
*可迭代的对象
foo(*'hello')
**字典
foo(**{'x':1,'y':2})
2.3返回值(*****)
return是函数结束的标志,函数内可以有多个return,,但只要执行一次函数就会立刻结束
并且把return后的值当作本次调用结果返回
注意:
1.返回值可以是任意类型
2.返回值没有个数限制
函数内没有return,默认返回None
return值1,返回该值
return值1,值2,值3,返回(值1,值2,值3)
3.函数对象(*****)
def foo():
pass
函数可以被当作数据去处理
1.引用
f=foo
2.当作参数
print(foo)
3.当作返回值
def bar()
def wrapper():
pass
return wrapper
f = bar()
4.当作容器类型的元素
def f1():
pass
def f2():
pass
l=[f1,f2] l[0]() func_dic={ 'f1':f1, 'f2':f2 }
4.函数嵌套
4.1函数的嵌套调用
def foo() bar() f1() f2() foo()4.2函数的潜逃定义
def f1(): def f2(): pass f2()
5、名称空间与作用域(******)
内置名称空间 全局名称空间 局部名称空间 def foo(x,y): #x=1,y=2 pass foo(1,2) 加载顺序:内置->全局-》局部 查找名字的顺序:从当前位置往上查找 如果当前位置在局部 局部—》全局-》内置 x=1 def outter(): def wrapper(): print(x) return wrapper f=outter() def bar(): x=111111 f() 全局作用域:全局存活,全局有效 内置+全局 局部作用域:临时存活,临时有效 局部 l=[] n=100 def foo(): l.append(1111) global n n=1 def f1(): x=1 def f2(): def f3(): nonlocal x x=10 globals() locals()
6.闭包函数(****)
x=1 def outter(): x=10 def wrapper(): print(x) return wrapper f=outter()
7.装饰器(****)
def deco(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) retutrn res return wrapper def deco1(x=1,y=2): def deco(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) retutrn res return wrapper return deco @deco def index(): pass
8.迭代器(****)
for max min sorted filter map
9.生成器(***)
10.三元表达式,列表推导式,字典生成式,声称其表达式(*****)
res = 条件成立的结果if条件else条件成立的结果
l=[表达式 for i in 可迭代对象 if 条件] g=(表达式 for i in 可迭代对象 if 条件) d={k:v for i in 可迭代对象 if 条件}
匿名函数(*****)
lambda 参数1,参数2:表达式
max min sorted map filter
12内置函数
13函数递归(****)
面向过程编程
核心过程二字,过程指的是解决问题的步骤,即先干什么,再干什么,然后干什么
基于该思想编写程序就好比设计一条流水线,是一种机械式的思维方式
优点:
复杂的问题流程化,进而简单化
缺点:
扩展性极差
def check_age(): pass # pwd=check_pwd() # print(pwd) # 将合法的用户名与密码写入文件 def insert(user,pwd,age,path='db.txt'): with open(path,mode='a',encoding='utf-8') as f: f.write('%s:%s:%s\n' %(user,pwd,age)) def register(): user=check_user() pwd=check_pwd() age=check_age() insert(user,pwd,age) print('register successfull') register() # 用户功能层 def register(): while True: # 检测用户名 name=input('username>>: ').strip() #检测用户是否重复,如果重复了则重新输入,否则break res=check_user_interface(name) if res: print('用户存在') else: break while True: # 检测密码 pwd1 = input('pwd1>>: ').strip() pwd2 = input('pwd2>>: ').strip() if pwd1 != pwd2: print('两次输入密码不一致,重新输入') else: break def tell_info(): name=input('>>: ').strip() info=select(name) print(info) # 接口层 def check_user_interface(name): res = select(name) # res=['egon','123'] if res: return True else: return False # 数据处理层 def select(name): with open('db.txt', 'r', encoding='utf-8') as f: for line in f: info = line.strip('\n').split(':') #info=['egon','123'] if name == info[0]: return info
什么是模块
模块是一系列功能的集合
常见的模块形式(自定义模块,第三方模块,内置模块):
1.一个module.py文件就是一个模块,文件名是module.py,而模块名是module
2.一个包含有__init__.py文件的文件夹也是模块
3.已被编译为共享库或DLL的C或C++扩展
4.使用C编写并链接到python解释器的内置模块
2.为什么要用模块
1.用第三天或者 内置的模块是一种拿来主义,可以极大地提升kaifaxiaol
2.自定义模块即将我们自己程序中需要用到的公共的功能写入一个python文件,然后
程序的各部分组件可以通过导入的方式来引用/重用自定义模块中的功能
3.如何使用模块
导入的方式有两种
import 模块名
from 模块名 import 具体的功能
后面还有一大堆零散文件的内容,主要是怎么去写一个项目的,由于我都理解了,太麻烦了,我就不写了,想要了解的私聊我,