Python-2:函数和模块
函数、常见模块、软件开发规范
想我憨憨的一生
这个作者很懒,什么都没留下…
展开
-
Python-2.40 shutil模块
shutil.move原创 2021-02-09 11:09:45 · 43 阅读 · 0 评论 -
Python-2.1 函数里的形参与实参
形参:在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名实参:在调用函数阶段传入的值称之为实际参数,简称实参,相当于变量值形参与实参的关系:1、在调用阶段,实参(变量值)会绑定给形参(变量名)2、这种绑定关系只能在函数体内使用3、实参与形参的绑定关系在函数调用是生效,函数调用结束解除绑定关系...原创 2020-11-18 14:11:52 · 115 阅读 · 0 评论 -
Python-2.22 匿名函数
一、def用于定义有名函数func=函数的内存地址def func(x, y): return x + yprint(func)二、lambda用于定义匿名函数print(lambda x, y: x + y)三、调用匿名函数方式一:res = (lambda x, y: x + y)(1, 2)print(res)方式二:func = lambda x, y: x + yres = func(1, 2)print(res)四、匿名函数的应用匿名函数用于临时转载 2020-11-25 20:30:07 · 161 阅读 · 0 评论 -
Python-2.20 二分法
需求:从一个数字列表里如何高效地找到想要的那个数字方案一:整体遍历效率太低nums = [-3, 4, 7, 10, 13, 21, 43, 77, 89]find_num = 10for num in nums: if num == find_num: print('找到了') break方案二:二分法nums = [-3, 4, 7, 10, 13, 21, 43, 77, 89]find_num = 10def binary_search(原创 2020-11-25 19:44:22 · 69 阅读 · 0 评论 -
Python-2.19 递归
一、递归的含义函数的递归调用:是函数嵌套调用的一种特殊形式具体是指:在调用一个函数的过程中又直接或者间接地调用本身直接调用本身:def func(): print('===>func') func()func()间接调用本身def func_1(): print('===>func_1') func_2()def func_2(): print('===>func_2') func_1()func_2()循原创 2020-11-25 19:23:01 · 95 阅读 · 0 评论 -
Python-2.17 生成器表达式
列表生成式l = ['winnie_dmn', 'allen_dmn', 'vivian_dmn', 'lff_dmn', 'zyp']new_l = []for name in l: if name.endswith('dmn'): new_l.append(name)print(new_l)l = ['winnie_dmn', 'allen_dmn', 'vivian_dmn', 'lff_dmn', 'zyp']new_l = [name for name i.原创 2020-11-25 17:54:14 · 81 阅读 · 0 评论 -
Python-2.18 三元表达式(三目运算)
语法格式:条件成立时要返回的值 if 条件 else 条件不成立时要返回的值x = 1y = 2res = x if x > y else yprint(res)res = 11111 if 'allen' == 'allen' else 22222print(res)原创 2020-11-25 16:38:29 · 307 阅读 · 0 评论 -
Python-2.14 多个装饰器的加载、执行顺序
def deco1(func1): # func1 = wrapper2的内存地址 def wrapper1(*args, **kwargs): print('正在运行===>deco1.wrapper1') res1 = func1(*args, **kwargs) return res1 return wrapper1def deco2(func2): # func2 = wrapper3的内存地址 def wra原创 2020-11-24 20:44:02 · 138 阅读 · 0 评论 -
Python-2.16 生成器
在函数内一旦存在yield关键字,调用函数并不会执行函数体代码会返回一个生成器对象,生成器即自定义的迭代器触发函数体代码的运行,遇到yield停下来,将yield后的值,当做本次调用的结果返回def func(): print('一') yield 1 print('二') yield 2 print('三') yield 3 print('四')f = func()print(f) # <generator object fun原创 2020-11-24 20:10:07 · 145 阅读 · 1 评论 -
Python-2.15 迭代器
迭代器:就是用来迭代取值的工具,为了解决索引取值的局限性可迭代对象:凡是内置有__iter__方法的都称之为可迭代对象调用可迭代对象下的__iter__方法,会将其转换成迭代器对象可迭代对象.iter(): 得到迭代器对象d = {'a': 1, 'b': 2, 'c': 3}d_iterator = d.__iter__()print(d_iterator)迭代器对象:内置有__next__方法、__iter__方法迭代器对象.next():得到迭代器的下一个值迭代器对象.it原创 2020-11-24 19:47:34 · 65 阅读 · 0 评论 -
Python-2.12 有参装饰器示例
示例1:由于语法糖@的限制,outter函数只能有一个参数,并且只用来接收被装饰对象的内存地址def auth(func, db_type): def wrapper(*args, **kwargs): name = input('请输入您的名字:').strip() pwd = input('请输入您的密码:').strip() if db_type == 'file': print('基于文件的验证')原创 2020-11-24 13:50:24 · 82 阅读 · 0 评论 -
Python-2.11 functools里wraps包
通过语法糖、装饰器的方法将原函数名指向的内存地址偷梁换柱成wrapper函数;但是当调被装饰对象的内置函数时,仍然显示的是wrapper,伪装的并不彻底。import timedef outter(func): def wrapper(*args, **kwargs): '''这是个主功能''' start = time.time() func(*args, **kwargs) stop = time.time()原创 2020-11-23 19:06:03 · 250 阅读 · 0 评论 -
Python-2.13 有参无参装饰器模版
无参装饰器模版def outter(func): def wrapper(*args, **kwargs): # 1、调用原函数 # 2、增加新功能 res = func(*args, **kwargs): return res return wrapper原创 2020-11-24 13:53:34 · 71 阅读 · 0 评论 -
Python-2.10 无参装饰器示例
装饰器:在不修改被装饰器对象源代码以及调用方式的前提下为被装饰对象添加新功能源代码:import timedef index(x, y): time.sleep(3) print('index %s %s' % (x, y))index(1111, 2222)添加需求,增加起始时间,算出间隔时间方式一:缺点:没有修改被装饰对象的调用方式,但是修改了源代码import timedef index(x, y): start = time.time()原创 2020-11-23 17:09:49 · 66 阅读 · 0 评论 -
Python-2.9 两种为函数传参方式
一、直接把函数体需要的参数定义成形参def func(a): print(a)func(1111)二、用闭包函数def func_1(x): def func_2(): print(x) return func_2x = func_1(2222)print(x)x()结果:<function func_1.<locals>.func_2 at 0x000001DF3DD7C048>2222三、示例# 传参原创 2020-11-23 16:00:02 · 230 阅读 · 0 评论 -
Python-2.8 闭包函数示例
闭包函数:名称空间与作用域+函数嵌套def func_1(): x = 1111 def func_2(): print(x) func_2()x = 5555def func_3(): x = 3333 func_1()def func_4(): x = 4444 func_3()func_4()结果:1111原创 2020-11-23 15:31:08 · 100 阅读 · 1 评论 -
Python-2.7 函数对象
函数对象精髓:可以把函数当成变量去用函数名=内存地址函数名():调用函数def func(): print('这是func函数')f = func # 函数名赋值print(f) # 打印的是函数地址f() # 函数名():调用函数结果:<function func at 0x0000022BC8EA2828>这是func函数一、可以赋值def func(): print('这是func函数')f = funcprint(f, func)原创 2020-11-23 14:29:51 · 131 阅读 · 0 评论 -
Python-2.6.1 名称空间
名称空间分为三种:一、内置名称空间存放的名字:存放的Python解析器内置的名字存活周期:Python解析器启动则产生,Python解析器关闭则销毁例如:int、input…二、全局名称空间存放的名字:除去函数内定义、内置的,剩下的都是全局名称空间的名字存活周期:Python文件执行则产生,Python文件运行完毕后则销毁三、局部名称空间存放的名字:在调用函数时,运行函数体代码过程中产生函数的名字存活周期:在调用时存活,函数调用完毕后则销毁加载顺序:内置名称空间>全局名称空间&g原创 2020-11-23 09:45:32 · 61 阅读 · 0 评论 -
Python-2.5 形参/实参混用顺序
形参混用的顺序:位置形参、默认形参、*args、命名关键字形参、**kwargsdef func(x, y=111, *args, z, **kwargs): print(x, y, args, z, kwargs)func(1, 2, 3, 4, 5, z=6, a=7, b=8)结果:1 2 (3, 4, 5) 6 {'a': 7, 'b': 8}实参混用的顺序:位置参数、*、关键字参数、**、关键字参数def func(x, y, z, a, b, c): .原创 2020-11-19 17:08:53 · 524 阅读 · 0 评论 -
Python-2.4 命名关键字参数
在函数定义时,*后定义的参数,称之为命名关键字参数特点:命名关键字参数必须按照key=value的形式为其传值示例1:def func(x, y, *, a, b): print(x, y, a, b)func(1, 2, b=4, a=3)结果:1 2 3 4示例2:def func(x, y, *, a=111111, b): print(x, y, a, b)func(1, 2, b=22222)结果:1 2 111111 22222...原创 2020-11-19 16:51:12 · 250 阅读 · 0 评论 -
Python-2.3 可变长度参数
可变长度的参数(*与**的用法)可变长度指的是在调用函数时,传入的值(实参)的个数不固定;对于溢出的实参必须有对应的形参来接受一、 可变长度的位置参数形参中带*,形参名:用来接收溢出的位置实参,溢出的位置实参会被保存成元组的格式后赋值紧跟其后的形参名(*后可以任意名字,一般是args)def func(a, b, *args): # args=(3, 4, 5, 6, 7, 8) print(a, b, args, type(args))func(1, 2, 3, 4, 5,原创 2020-11-18 20:44:16 · 628 阅读 · 0 评论 -
Python-2.2 函数里位置参数与关键字参数
一、位置参数:按照从左到右的顺序依次定义的参数称之为位置参数位置形参:在函数定义阶段,按照从左到右的顺序直接定义的‘变量名’特点:必须被传值,多一个不行少一个也不行位置实参:在函数调用阶段, 按照从左到右的顺序依次传入的值二、关键字参数默认参数(默认形参):在定义函数阶段,就已经被赋值的形参,称之为默认参数特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值关键字实参:在函数调用阶段,按照key=value的形式传入的值特点:指名道姓给某个形参传值,可以完全不参原创 2020-11-18 15:15:31 · 7106 阅读 · 0 评论 -
Python-2.39 shelve模块
对象持久保存的方法原创 2020-12-20 18:33:01 · 76 阅读 · 1 评论 -
Python-2.16.2 协程函数
协程函数就是函数内部有yield表达式形式的生成器使用yield表达式:要先运行next(),相当于初始化函数,让函数停在yield然后再运行send(),send会传给yield一个值def eater(name): print(f'{name}吃东西') food_list = [] while True: food = yield food_list print(f'{name}吃{food} ') food_list原创 2020-12-17 19:49:26 · 102 阅读 · 0 评论 -
Python-2.23 列表推导式
列表推导式格式:方式一:[表达式 for 变量 in 列表]方式二:[表达式 for 变量 in 列表 if 条件]示例:list_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]print([a ** 2 for a in list_1])print([a ** 2 for a in list_1 if a > 5])print(dict([(x, x ** 2) for x in list_1]))print([(a, b) for a in range(10) if原创 2020-12-16 15:34:09 · 92 阅读 · 0 评论 -
Python-2.21 高阶函数
高阶函数:就是把一个函数当作参数传给另外一个函数,或者一个函数的返回值为另外一个函数示例:def func_1(): print('in the func_1')def func_2(func): func() print('in the func_2')func_2(func_1)结果:in the func_1in the func_2def func_1(): print('in the func_1')def func_2(func)原创 2020-12-16 15:04:06 · 89 阅读 · 0 评论 -
Python-2.6.2 作用域LEGB
一、L-local 函数内部作用域x = 111def func(): x = 222 return xres = func()print(res) 结果:222二、E-enclosing 函数内部与内嵌函数之间x = 111def func_1(): x = 222 def func_2(): x = 333 print('local:', x) func_2() print('enclos原创 2020-12-15 19:24:49 · 58 阅读 · 0 评论 -
Python-2.38 软件开发的目录规范
Foo/|-- core/| |-- core.py||-- api/| |-- api.py||-- db/| |-- db_handle.py||-- lib/| |-- common.py||-- conf/| |-- settings.py||-- run.py|-- setup.py|-- requirements.txt|-- README • core/: 存放业务逻辑相关代码 • api/: 存放接口文件,接口主要用于为业务原创 2020-12-17 18:37:05 · 54 阅读 · 0 评论 -
Python-2.37 正则表达式
正则匹配import re# \w匹配字母数字及下划线;\W匹配非字母数字下划线print(re.findall('\w', 'hello winnie 12334567'))print(re.findall('\W', 'hello winnie 12334567'))# \s匹配任意空白字符,等价于\t\n\r\f,\S匹配非空字符print(re.findall('\s', 'hello winnie 12334567'))print(re.findall('\S', 'hello.原创 2020-12-02 20:33:38 · 123 阅读 · 0 评论 -
Python-2.36 logging模块
一、日志级别与配置import logging# 一:日志配置logging.basicConfig( # 1、日志输出位置:1、终端 2、文件 # filename='access.log', # 不指定,默认打印到终端 # 2、日志格式 format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', # 3、时间格式 datefmt='%Y-%m-%d %H:原创 2020-12-17 18:35:56 · 86 阅读 · 0 评论 -
Python-2.35 subprocess模块
subprocess用来执行系统命令的import subprocessobj = subprocess.Popen('dir', # dir为Windows系统,ls为linux系统,多个可以使用分号分隔,例如:'echo 123 ; ls / ; ls /root' shell=True, stdout=subprocess.PIPE, # 正确管道 std原创 2020-12-02 17:44:50 · 106 阅读 · 0 评论 -
Python-2.34 hashlib模块
一、hashlib的概念和用途hash一类算法,该算法接受传入的内容,经过运算得到一串hash值hash值的特点:只要传入的内容一样,得到的hash值必然一样不能由hash值返解成内容不管传入的内容有多大,只要使用的hash算法不变,得到的hash值长度是一定hash的用途:用途1:特点2用于密码密文传输与验证用途2:特点1、3用于文件完整性校验二、hashlib的方法import hashlibm = hashlib.md5()m.update('hello'.encod转载 2020-12-02 17:18:46 · 73 阅读 · 0 评论 -
Python-2.33 configparser模块
test.ini文件[section1]k1 = v1k2:v2user=winnieage=18is_admin=truesalary=31[section2]k1 = v1执行文件import configparserconfig = configparser.ConfigParser()config.read('test.ini')# 1、获取sectionprint(config.sections())# 2、获取某一setion下的所有optionspr原创 2020-12-02 15:33:18 · 96 阅读 · 0 评论 -
Python-2.32 json与pickle模块
一、序列化与反序列化概念与用途内存中的数据类型---->序列化---->特定的格式(json格式或者pickle格式)内存中的数据类型<----反序列化<----特定的格式(json格式或者pickle格式) # 土办法: {'aaa':111}--->序列化str({'aaa':111})----->"{'aaa':111}" {'aaa':111}<---反序列化eval("{'aaa':111}")<-----"{'aaa':111}"原创 2020-12-02 14:05:44 · 65 阅读 · 0 评论 -
Python-2.31 打印进度条
print('[%-50s]' % '#')print('[%-50s]' % '##')print('[%-50s]' % '###')结果:[# ][## ][### ]进度条import timere原创 2020-12-02 12:26:17 · 286 阅读 · 0 评论 -
Python-2.29 os模块
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cdos.curdir 返回当前目录: ('.')os.pardir 获取当前目录的父目录字符串名:('..')os.makedirs('dirname1/dirname2') 可生成多层递归目录os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.m转载 2020-12-01 19:31:35 · 60 阅读 · 0 评论 -
Python-2.28 random模块
import randomprint(random.random()) # (0,1)---float 大于0小于1之间的小数print(random.randint(1, 5)) # [1,5] 大于等于1且小于等于5之间的整数print(random.randrange(1, 5)) # [1,5) 大于等于1且小于5之间的整数print(random.choice([111, 222, 'aaa', [333, 444]])) # 111或者222或者'aaa'或者[333, 444原创 2020-12-01 19:10:19 · 109 阅读 · 0 评论 -
Python-2.27 时间模块
一、time模块时间分为三种格式:1、时间戳:从1970年到现在经过的秒数作用:用于时间间隔的计算import timeprint(time.time())结果:1606627937.71802042、按照某种格式显示的时间:2020-11-29 11:11:11作用:用于展示时间import timeprint(time.strftime('%Y-%m-%d %H:%M:%S %p'))print(time.strftime('%Y-%m-%d %x'))结果:202原创 2020-12-01 18:24:04 · 83 阅读 · 0 评论 -
Python-2.26 函数的类型提示
def register(name: str, age: int, hobbies: tuple) -> int: # 提示参数的数据类型,返回类型 print(name) print(age) print(hobbies) return 111register(1, 'aaa', [1, ]) # 未按照提示的参数类型进行传参,执行时不会报错res = register('winnie', 18, ('play', 'music'))print(res原创 2020-11-29 13:16:47 · 263 阅读 · 0 评论 -
Python-2.30 sys模块
import sysprint(sys.path)# 值为一个列表,存放了一系列的对文件夹# 其中第一个文件夹是当前执行文件所在的文件夹import sys# 找foo.py就把foo.py的文件夹添加到环境变量中sys.path.append(r'/Users/linhaifeng/PycharmProjects/s14/day21/aa')# import foo# foo.say()# sys.modules查看已经加载到内存中的模块import sysimport原创 2020-12-02 11:40:11 · 110 阅读 · 0 评论