NO.4:自学python之路------内置方法、装饰器、迭代器
引言
是时候开始新的Python学习了,最近要考英语,可能不会周更,但是尽量吧。
正文
内置方法
Python提供给了使用者很多内置方法,可以便于编程使用。这里就来挑选其中大部分的内置方法进行解释其用途。
abs() #求取绝对值,例子。
a = -5
abs(a)#求绝对值
all() #迭代对象全为真,则返回Ture,否则返回False,例子。
all([1,5,6])#True
all([5,0,6])#False
any() #与all类似,但是有真则返回Ture,全假返回False,例子。
any([0,0,-1])#True
any([0,0,0])#False
ascii() #将格式转换为字符串,例子。
ascii('你好')
bin() #十进制数转换为二进制,例子。
bin(15)
bool() #与all类似,判断单个真假,例子。
bool(0)#False
bool(other)#True
bytes() #转换为byte型,转换后的字符不可修改,例子。
a = bytes('abcdd',encoding='utf-8')
print(a[0])#
bytearray() #与bytes类似,但可以修改,例子。
a = bytearray('abcdd',encoding='utf-8')
a[0] = 66
callable() #判断函数能否调用,例子。
callable(abs)#True
callable(tensorflow.rnn)#False
chr() #返回ascii码对应的字符,同理ord()可以返回字符对应的ascii码,例子。
chr(97)#a
ord('a')#
compile() #字符串编译为可执行代码,source:字符串或者AST对象,filename:代码文件名称,mode:指定编译代码的种类。exec类型,表示这是一个序列语句,可以进行运行;eval类型,表示这是一个单一的表达式语句,可以用来计算相应的值;single类型,表示这是一个单一语句,采用交互模式执行,例子。
code = '1+2+3+4'
a = compile(code,'','eval')
eval(a)
dir() #查看有什么方法,例子。
a = 5
dir(a)
divmod() #返回商和余数,(c,d) = divmod(a,b)表示a/b=c余d,例子。
divmod(5,2)#(2,1)
filter() #与匿名函数结合,实现过滤,例子。
a = filter(lambda n:n>5,range(10))
for i in a:
print(i)
map() #与filter不同,是将所有值传入匿名函数,例子。
a = map(lambda n:n,range(10))
for i in a:
print(i)
题外 reduce() #可以实现累加,累乘,例子。
import functools
a = functools.reduce(lambda x,y:x+y,range(10))#
frozenset() #不可变集合,例子。
frozenset('123abc')
globals() #打印返回当前运行环境下的全局符号表字典,例子。
globals()
hash() #字符串与数字的映射关系,即哈希值,例子。
hash('蛤蛤')#
help() #查看帮助,例子。
help(hash)
hex() #10进制转16进制,例子。
hex(35)
max() #返回列表中的最大值,相反也有min(),例子。
max([1,2,3,4])#
min([1,2,3,4])#
oct() #10进制转8进制,例子。
oct(17)
pow() #求次方,a = pow(b,c)即 a = b^(c),例子。
pow(2,3)#
round() #保留某位小数,例子。
round(1.2345,2)#1.23
slice() #切片,用途与‘:’重叠,例子。
a = range(10)
a[slice(2,5)]
sorted() #将字典转换为列表,并排序,例子。
a = {6:'a',7:'b',10:'c',2:'d'}
sorted(a.items())#按Key排序
sorted(a.items(),key = lambda x:x[1])#按value排序
zip() #组合列表为新的元组,例子。
a = [1,2,3,4]
b = ['a','b','c','d']
for i in zip(a,b):
print(i)
__import__() #import字符方法,例子。
__import__('os')
装饰器
装饰器的本质是一个函数,功能为装饰其他函数。它可以在不修改被装饰函数源代码以及被装饰函数的调用方式的前提条件下,为被装饰函数增加其他功能。
装饰器的实现主要依靠:1.函数也是一种变量;2.高阶函数;3.嵌套函数。
函数即变量
函数也是一种变量,可以靠赋值的方法赋给其他变量名,例子。
def a():
print('hello')
b = a
print(b)#内存地址
b()#函数a执行
这个特性,为不改变函数名调用被装饰函数提供了条件。
高阶函数
高阶函数在之前已经介绍过了,这里再介绍一次。
高阶函数是指把函数名作为参数,传递给另外一个函数。这样就可以实现为函数添加功能。例子。
def a(func):
print('函数运行')
func()
print('运行结束')
def b():
print('另一个函数') a(b)#为函数b添加了功能
嵌套函数
嵌套函数,就是再函数体内再定义一个函数。通过函数的嵌套,可以实现不改变调用方式调用函数。例子。
def a():
def b():
print('hello')
return b b = a()#这里b也就相当于嵌套函数内的b,这里a需要带‘()'
b() #运行嵌套的函数
综合
综合上面的内容,可以完成一个简单的装饰器函数,例子。
def a(func):
def wrapper():
print('装饰内容')
func()
return wrapper
@a#b = a(b)
def b():
print('被装饰内容') b()
当被装饰函数拥有输入值,返回值时,输入值可以依靠不定变量完成,例子。
def a(func):
def wrapper(*args,**kwargs):
print('装饰内容')
res = func(*args,**kwargs)
return res
return wrapper
@a
def b(name,age):
print('%s,%s'%(name,age))
return '返回' b('蛤蛤',120)
当需要给装饰器输入参数时,例子。
def a(type):
def out_wrapper(func):
def wrapper(*args,**kwargs):
if type == 1:
print('装饰内容1')
elif type == 2:
print('装饰内容2')
res = func(*args,**kwargs)
return res
return wrapper
return out_wrapper
@a(1)
def b(name,age):
print('%s,%s'%(name,age))
return '返回' b('蛤蛤',120)
迭代器
可直接用于for循环的数据类型:1.集合数据类型,list,tuple,dict,set,str;2.generator,包括生成器和带yield的generator function。
生成器
避免列表过大占用内存,可以靠推测时可以依靠迭代推测即时生成。1.只有在调用时才会生成相应的数据 2.无法回到上一次。例子。
a = (i*2 for i in range(10))
#方法1
a.__next__()
#方法2
for i in a:
print(i)
改写上面的式子为生成器,可以用yield来完成,例子。
def a(max):
i = 0
while i<max:
yield i*i
i = i+1
b = a(10)
b.__next__()
当next过多时,会报错,所以可以用抓异常的方法来防止出错。例子。
def a(max):
i = 0
while i<max:
yield i*i
i = i+1
b = a(10)
while True:
try:
next(b)
except StopIteration as e:
print('已达上限:',e.value)
break
生成器并行。send()函数可以唤醒yield并传入值;next()只能唤醒yield;所以可以依靠yield实现单线程下程序的并行运行。例子。
def income(name):
print('%s已登陆'%(name))
money = 0
while True:
new_money = yield
money = money+new_money
print('%s收入%d元,现有%d元'%(name,new_money,money)) def outlet(name):
print('%s已登陆'%(name))
a = income('凯凯王')
a.__next__()#唤醒yeild
print('开始转账!')
flag = True
while flag:
money = int(input('转账金额:'))
a.send(money)
select = input('是否继续?[Y:yes]:')
if select == 'y' or select == 'Y':
pass
else:
break outlet('卖力头')
迭代器
可迭代对象Iterable,可以使用 isinstance()判断。例子。
from collections import Iterable
isinstance([],Iterable)
JSON序列化
json可以将运行中的内存中的对象存储为文件,供其他程序或软件使用,目前json正在逐渐取代xml
存取过程,例子。
import json
info = {
'name':'cdd',
'age':23,
}
f = open('test.txt','w')
f.write(json.dumps(info))#存
f.colse
g = open('test.txt','r')
data = json.loads(g.read())#读
f.close()
print(data)
软件目录结构
合理的软件目录结构可以提高项目的可读性,可维护性。一个合理的软件目录结构,例子。
Projectname/
-bin/ #可执行文件
-function.py
-projectname/ #项目所有源代码
-test/ #测试文件
-__init__.py
-test_main.py
-__init__.py
-main.py
-docs/ #文档文件
-conf.py
-setup.py #安装部署打包脚本
-requirements.txt#依赖关系
-readme #1.软件功能,2.安装环境,3.简要说明,4.代码目录,5.常见问题
查看
作业
实现一个银行+商城程序,目的在于练习装饰器与生成器并行
银行:1.还款,2.充值,3.提现,4.多用户转账(并行)
商城:1.购物车,2.银行接口结账
管理:1.添加账户,2.额度修改,3.冻结账户
实现:
由于转账已在例子中完成,不再添加,冻结功能由于编程时遗忘了,所以也不添加了。作业链接。密码: 4gwm
NO.4:自学python之路------内置方法、装饰器、迭代器的更多相关文章
- python常用数据类型内置方法介绍
熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 下面介绍了python常用的集中数据类型及其方法,点开源代码,其中对主要方法都进行了中文注释. 一.整型 a = 100 a.xx ...
- python字符串常用内置方法
python字符串常用内置方法 定义: 字符串是一个有序的字符的集合,用与存储和表示基本的文本信息. python中引号中间包含的就是字符串. # s1='hello world' # s2=&quo ...
- python字符串处理内置方法一览表
python字符串处理内置方法一览表 序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar) 返回一个指定的宽度 widt ...
- Python反射和内置方法(双下方法)
Python反射和内置方法(双下方法) 一.反射 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发 ...
- Python之路----------内置函数
1.abs(x)绝对值 #coding=utf-8 a = 1 b = -2 print(abs(a)) print(abs(b)) 2.all(iterable)可迭代对象里面所有内容为真返回真,空 ...
- python之路——内置函数和匿名函数
阅读目录 楔子 内置函数 匿名函数 本章小结 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们 ...
- Python 类的内置方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # p ...
- python 反射和内置方法
一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) ...
- Python—面向对象06 内置方法
一 .isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object ...
随机推荐
- vue 项目项目启动时由于EsLint代码校验报错
今天在编写好vue项目代码时,在命令行输入npm start的时候出现了如下图所示的一大堆错误: 在网上查找资料说是缺少EsLint配置文件的问题,最终找到一篇由 hahazexia 编写的一篇博客文 ...
- 添加打印功能 iOS
app直接调取系统的打印功能 https://blog.csdn.net/wsyx768/article/details/79098885
- UNIX网络编程 卷2 源代码使用
1. 下载源码,W. Richard Stevens的主页:http://www.kohala.com/start/ wget http://www.kohala.com/start/unpv22e/ ...
- ORM增删改查(django)
单表操作: 一.添加 (1)方式一 from mysite.models import * def add(request): book= Book(name="python" ...
- canvas绘制折线图(仿echarts)
遇到的问题:Retina屏上字体线条模糊问题 解决方案:放大canvas的大小,然后用css压缩回原大小,例如:想要900*400的画布,先将画布设置为 width="1800px" ...
- SVG Animation
原文:http://tutorials.jenkov.com/svg/index.html http://tutorials.jenkov.com/svg/svg-animation.html SVG ...
- 托管代码编写mssql存储过程
参考:http://wenku.it168.com/d_000642903.shtml 打开vs,创建数据库项目,添加新项,选择sql clr c#, 选择存储过程. 样例: [Microsoft.S ...
- Java面向对象六大原则
引用自百度知道: ——根据首字母快速记忆SOLID(固体,坚固的),具体请参考这里 1) Open-Close Principle(OCP),开-闭原则, 讲的是设计要对扩展有好的支持,而对修改要严格 ...
- JavaWeb基础—MVC与三层架构
一.MVC的概念 MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- 2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd
2017-2018-1 20155214 <信息安全系统设计基础> 第9周课下测试-mypwd(深入版) 题目要求: 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; ...