python 基础知识
说明:
- 参考系列加入官网系列文档:python 3.7
- 各部分代码都是写到同一文件中的
second.py
- 声明的变量是公用的。
上一篇主要是入门,如果你学习过其他编程语言,基本动手操作一遍就了解了。
高级特性
切片
获取部分数据(类似slice)的操作方法。
说明:
- 基础语法表示
[start:end]
,start
其实位置,end
结束位置(不包含);接受负数(-1
),从最后一个元素开始。 - 默认
start
为0
,默认end
为数据长度(length) -
[start:end:sep]
表示间隔sep
取一个值;
# [:] 生成10个有序数列
names = list(range(11))
print(names[1:6])
# [::]
print(names[1:6:2])
迭代 for...in
对数据进行迭代操作;
说明:
- 通过
collections.abc
模块导入Iterable
类型 -
isinstance
判断数据类型是否同给定的类型相同,返回bool。 - 通过内置函数
enumerate
把list转为索引-元素对。
# 判断当前数据是否可以进行迭代
from collections.abc import Iterable
# output True
print(isinstance(names,Iterable))
# enumerate
names = enumerate(names)
for k,v in names:
print(k,v)
列表生成式
快速生成数据。[]
表达式里进行操作;
说明:
- 依次
for
循环取得变量。
# [] 简易表达式
nums = [n*n for n in [2,4,8]]
print(nums)
# 多层操作
nums = [n*m for n in [2,4,8] for m in [1,3,6]]
print(nums)
生成器
生成器函数可以用来生成数据,利用它的特性不需要把所有数据都列出来,减少数据占据的空间。
说明:
-
()
创建一个生成器; -
next()
用来获取元素,获取到最后一个元素时,再次获取就会报错StopIteration
; - 在普通函数中使用
yield
关键字,成为一个生成器函数;
# generator
names=(n*n for n in [2,4,8])
for val in names:
print("for-",val)
# for 循环已经输出了所有值,在调用next() 报错
print(next(names))
迭代器
迭代对象Iterator
表示的是数据流,只能通过next()
方法才能访问到下一个值;基本数据类型list/dict/set
是可迭代数据,但不是迭代对象。
说明:
-
isinstance()
判断是否为迭代对象。 - 通过使用
iter()
函数将可迭代数据转换为迭代对象; - 生成器可用于生成无限大的数据流。
# 判断当前数据类型是否为迭代对象
from collections.abc import Iterator
# False
print(isinstance(nums,Iterator))
# True
print(isinstance(names,Iterator))
# using iter() output: True
print(isinstance(iter(nums),Iterator))
函数
学习是建立在有前端基础的情况下,一些类似于JS的语法、语义不会在重复书写,只记录不同之处。
匿名函数
说明:
-
lambda
表示匿名函数,
# 匿名函数
total = lambda val:val*3
# 12
print(total(4))
装饰器
在代码运行期间,动态增加功能的方式,称之为装饰器
说明:
-
__name__
属性返回函数定义的名称 -
@
表示需要额外执行的函数名称,会自动调用。 - 装饰器接受当前函数作为参数,用于回调执行。
-
@functools.warps()
用于复制原始函数属性到返回函数上,比如实例中的wrapper
函数,导致__name__
变为了wrapper
,
# 装饰器 @+函数名称
def log(fn):
def wrapper(*arg,**oth):
print("------操作--------",fn.__name__,"---------操作用户名称---------",arg[0])
return fn(*arg,**oth)
return wrapper
@log
def login(user):
print("欢迎登陆:"+user)
# ------操作-------- login ---------操作用户名称--------- admin
# 欢迎登陆:admin
login("admin")
# 装饰器函数掺入自定义参数
import functools
def log(bool):
def decorator(fn):
@functools.wraps(fn)
def wrapper(*arg,**oth):
print("------操作--------",fn.__name__,"---------操作用户名称---------",arg[0])
if bool:
print("2019-10-06")
return fn(*arg,**oth)
return wrapper
return decorator
@log(True)
def login(user):
print("欢迎登陆:"+user)
# ------操作-------- login ---------操作用户名称--------- test
# 2019-10-06
# 欢迎登陆:test
login("test")
偏函数
利用functools.partial()
可以设置已定义函数的默认值参数。
说明:
- 针对公用函数进行设置,各模块需要传递各自标识,以进行不同处理操作。
-
functools.partial()
第二个参数如果没有指定参数名,如flag=False
,则默认将参数放到arg[0]
第一个。
# 设定函数默认值
def info(name,flag = True):
adorn = ""
if flag:
adorn = "尊贵的"
print("欢迎"+adorn+"客人:",name)
info("admin",False)
info("test",False)
# 通过 functools.partial() 设置处理 ,无需每次传递参数 flag
info_ = functools.partial(info,flag=False)
info_("admin")
info_("test")
模块
按功能进行划分以及每个人对自己写的模块进行包装。防止命名冲突
说明:
-
from...import...
导入某个模块中的方法或者变量 -
import...
导入整个模块,使用调用 - 以目录为
package
包,必须包含__init__.py
文件,可为空,
包目录示例:
# 模块使用
# 从模块文件中导入某个方法或者变量
from logs.info import print_log
# 导入整个模块 user.info 使用时调用获取
import user.info
print_log()
print(user.info._Author_)
正则表达式
re
模块包含了所有正则表达式的功能。
说明
- 由于字符串自身
\
的转义,在使用时使用r""
-
re.match()
匹配到时返回match
对象 -
re.split()
第一个参数提供正则表达式,分割字符串 , 数据类型为list -
group()
获取匹配到的结果只,group(0)
永远是原始字符串。 -
groups()
返回匹配到的结果值(元组) -
re.compile()
使用预编译正则表达式,在后续使用过程中,程序不会再进行编译
# re 模块 正则表达式
import re
# 匹配任意字符一次或多次 + 'lo'
print(re.match(r".+lo","hello"))
# 匹配 'l' 一次或多次进行分割
print(re.split(r"l+","hello"))
# groups ('h', 'lo')
print(re.match(r"^([a-z]+)el([a-z]+)$","hello").groups())
# 对表达式及进行编译,
reg_ = re.compile(r"\d+\+\d+");
print(reg.match("2233+123").group(1))
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。