python基础

https://github.com/ml-tooling/best-of-ml-python

1. python基础

方法是python可对数据执行的操作。每个方法后面有括号,需要提供额外的信息来完成工作。有的方法不需要提供额外的信息

1.1 命名规范

http://c.biancheng.net/view/4186.html

https://blog.csdn.net/weixin_41855010/article/details/105700153

https://github.com/gscheartA/Improve-your-code

1.2 帮助文档查询API

#查询lower的API
help(firstValue.lower)#不用加括号()

#第二种查询方式-交互式查询
help()

1.3 编码规范

https://www.runoob.com/w3cnote/google-python-styleguide.html

  • 不同反斜杠链接行,用括号隐式连接
  • 文档、模块描述 __ doc __ 查看
  • 函数解释、类解释文档
  • 非继承类,使用ClassName(object):
  • TODO(): 注释
  • 模块导入顺序:标准库 - 第三方库 - 自定义库

1.4 print

可以不输出到控制台、屏幕,可以指定输出

print(file=xxx)

注意

print() 仍然属于函数,但是由于没有返回值,所以返回的是None

1.5 f-string

# 字符串中出现{}符号,要双写转义
a=[1,2,3]
print(f'双写转义{{}},value{a}') # 结果: 双写转义{},[1,2,3]

2. 运算优先级

https://www.runoob.com/python/python-operators.html#ysf8
不同级运算顺序:从右向左
同级运算顺序:从左向右

not > and > or

https://blog.csdn.net/qq_26714479/article/details/80021715
https://blog.csdn.net/Eddy364/article/details/105480287
https://blog.csdn.net/chouzhou9701/article/details/88694795

3. 命名空间与作用域

https://blog.csdn.net/L_fengzifei/article/details/105164770

4. 模块与包

尽量不使用 from xxx import *

在导入模块中的变量时,注意是可变对象还是不可变对象,这与变量的引用机制是相同的 https://www.byhy.net/tut/py/basic/14/
(导入相同的不可变变量,其实在当前脚本下是另一别名)

4.1 import

路径查找顺序

先在sys.modules中查找!!!

import及其sys.modules具有可传递性

然后查找内置模块built-in,(其实内置模块属于sys.modules)
最后在sys.path查找

当前执行文件所在目录 !!!
python环境变量下的每个目录PYTHONPATH
python默认安装路径目录lib/site-packages

所有路径都保存在sys.path变量中

自定义扩展模块,放在lib/site-packages就行

按照sys.path的顺序进行搜索,python先是用户环境路径(terminal>> python script.py文件所在的工作目录),然后是系统环境路径
sys.path.append()是临时添加方法
PYTHONPATH添加方法,命令行set PYTHONPATH是临时方法,WINGUI下是永久添加方法

单下划线_ name 的变量或方法不会被import导入http://c.biancheng.net/view/2401.html

4.1.1 环境变量/sys.path

注意:环境变量和sys.path不是一个概念,从上述可以看出,用到sys.path进行模块搜索时,使用到了PYTHONPATH这个环境变量
sys.path.append()时不必重启pycham

https://www.byhy.net/blog/env/

环境变量仍然是变量,是与系统与程序相关的信息配置项

获得环境变量值

环境变量value=os.enviorn['环境变量Key']

临时设置环境变量

os.enviorn['环境变量key']=value

这是设置python的环境变量(目录)(不是设置 编写的脚本下的内部调用的某环境变量)

set PYTHONPATH='xxx certainpath'(这是在命令行执行,不是在.py文件中执行)

sys.argv
sys.argv用于获取python程序的命令行参数
argvsys模块的一个全局变量,也是sys的一个属性,argv本身是一个list类型的对象
sys.argv[0]用于获取当前Python程序的存储路径,也就是传入的模块名
sys.argv[1:]为命令行中传入的参数

sys.path

sys.path.append(f’{path}')

环境变量的继承

https://www.byhy.net/blog/env/

pycharm 是python脚本的父进程
pychar或cmd的父进程是桌面管理系统(exploer)会自动重新读取环境变量

cmd中设置环境变量

注意重启,cmd会自动拷贝一份父进程的环境变量

每个 程序(进程) 启动后,都会自动拷贝一份 父进程 的环境变量
也就是如果父进程的环境变量改变,要重启子进程才能生效

脚本之间,以进程方式进行调用的时候或者是import的时候,也存在环境变量继承的概念

4.1.2 __ all __变量

如果是限制被导入的方法和变量,对__ all __赋值
只在from xxx import *时才会有效

如果只是显示模块的所有成员,module.__all__进行查看
与__ dir () 不同的是, all __ 变量不会显示模块中的特殊成员

4.1.3 __ name __

用于获得对象名,模块名

函数名

def fun():
	pass

print(fun.__name__) # str

模块名

if __name__ == '__main__':
	pass

import 模块时,__ name __的变化https://blog.csdn.net/wosind/article/details/90728198

A.py import B.py;则B.py 的__name__不再是__main__而是文件名

4.1.4 __ dir __()/dir()

https://blog.csdn.net/lis_12/article/details/53521554

查看模块的所有成员,用于产看属性和方法

dir()__dir__()是方法

与类和实例有关的区别见https://blog.csdn.net/L_fengzifei/article/details/105178477

4.1.5 __ dict __

https://blog.csdn.net/lis_12/article/details/53521554

用于产看属性和方法

__dict__是属性

__dict__返回的是dir()的子集

当对象没有__dict__这一属性时,就要用dir()获取对象的方法和属性

与类和实例有关的区别见https://blog.csdn.net/L_fengzifei/article/details/105178477

4.1.6 __ doc __

产看模块、函数、类的说明文档

4.1.7 __ file __

查看模块的源文件路径,package.__file__属性,获得包的绝对路径(输出的是该包下的__ init __.py文件(对应的)绝对路径

4.1.8__ module __

查看当前对象在哪个模块
内置类型没有__module__,函数有__module__

from m import cls
c=cls()
c.__module__ # m

class B:
	pass
b=B()
b.__module__ # __main__

def f():
	pass
f.__module__ # __main__

4.2. 包

4.2.1 __ init __.py–还没看完

__ pycache __ 文件夹???

直接导入包,并不会马上导入包中的模块
from 包名 import *也只会导入__ init __.py ,不会导入包中的其他模块

__init__.py的相对引用机制???https://blog.csdn.net/xx_xjm/article/details/122648009?spm=1001.2014.3001.5502

4.3 整个项目中的包与模块导入

4.3.1 sys.modules

https://blog.csdn.net/linuxheik/article/details/51889514
https://blog.csdn.net/xx_xjm/article/details/122648009?spm=1001.2014.3001.5502
https://blog.csdn.net/u011208984/article/details/90214141

字典形式
记录导入的模块
python解释器启动时,自动导入一些模块,加载到内存中,当模块第一次导入时,sys.modules自动记录该模块,第二次导入时,直接从内存中的字典中查找
除了内置模块__builtins__, 有些解释器启动时自动导入的模块,对当前作用域不可见,需要手动import(模块导入不等于模块可见)
内置模块不等于标准库(os,re,sys),内置模块可见,标准库在不导入前不可见
import及其sys.modules具有可传递性

内置作用域通过builtin的标准模块来实现,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个模块才能使用

import builtins
dir(builtins)

4.3.2 绝对导入和相对导入–还没看完???

注意!
pycharm会自动将打开项目的根目录添加到sys.path
其他编译器和命令行不会,只会将当前的执行脚本所在目录添加到sys.path

相对导入时,注意__name__的变化

4.4 os and I/O

4.4.1 文本与二进制

https://www.byhy.net/tut/py/basic/13/

读写操作可以是文本模式或**二进制(字节序列)**模式

本质上,读写操作都是对字节串对象进行解析的,但是当以文本方式进行读写时,python会自动实现字节串到字符串的转换
注意,当以二进制模式进行读写时,操作的对象是字节串对象,而不是字符型进制数(底层原始数据)(字节串对象与进制数在字面表达上的差异)

4.4.2 os

os.sep当前使用平台的路径分割符
os.walk()递归遍历
glob按照正则表达是进行遍历

os.system()

用于调用外部程序

os.system('cmd')

os.system()无法获取被调用程序输出到终端窗口的内容
subporcess模块,处理被调用程序的输出信息

os.popen()

https://blog.csdn.net/xc_zhou/article/details/96445422
https://www.runoob.com/python/os-popen.html

通过管道方式来实现,函数返回的是一个file对象,file对象的内容那个是脚本输出的内容

with os.popen('file') as f:
	f.read() # 读到的是脚本输出的内容

os.popen()是非阻塞的,即在没完全执行玩之前就会之行下一条语句,如果变成完全阻塞式,利用f=os.popen() f.read()的方法进行执行

subprocess模块-没看完

https://www.runoob.com/w3cnote/python3-subprocess.html



os.startfile()

调用任何非可执行程序文件,word/excel等

Pathlib - 还没看

4.4.3 I/O

open()

http://c.biancheng.net/view/2544.html

注意缓存机制
f.close()必须调用close() 函数才能将缓冲区的数据写入文件
f.flush()可以手动将数据写入文件中,即将缓存区的数据写入文件。

对于二进制文件,数据是直接写入文件的
对于文本文件,数据是先进入缓冲区,再写入文件

readlines()writelines()的换行符注意事项http://c.biancheng.net/view/4758.html

readline()/readlines()/read()
with open('file.txt','r') as f:
	f.read() # 一个str类型的数据,'line1\nline2\nline3...'

with open('file.txt','r') as f:
	f.readline() # 一个str类型的数据,'line1\n'

with open('file.txt','r') as f:
	f.readlines() # 一个list类型的数据 ['line1\n','line2\n','line3\n',...]

with open('file.txt','r') as f:
	f.read().splitlines() # 一个list数据类型 ['line1','line2','line3',...]
with as

使用with as 操作打开的文件对象,本身就是上下文管理器;执行完with as 语句后自动关闭已经打开的文件

注意,with as 是操作上文管理器,而不是生成上下文管理器

上下文管理器

http://c.biancheng.net/view/5319.html

注意,with as 是操作上文管理器,而不是生成上下文管理器

构建上下文管理器的方法

基于类实现
基于生成器实现-(没看完)

同时包含 __ enter __() 和 __ exit () 方法对象就是上下文管理器
上下文管理器是一个实现了
enter exit __ 方法的类

上下文管理器 就是with as 语句操作对象

with as 操作上下文管理器时,会在执行代码块之前,先执行上下文管理器的 __ enter __() 方法,然后再执行代码块,最后执行 __ exit __() 方法

  • __ enter __(self)

进入上下文管理器自动调用的方法,该方法在with as 代码块执行前执行
如果with 语句后面有as 语句,那么该方法(__ enter __)的返回值会被赋予给as语句后的变量
__ enter __(self) 方法可以返回多个值,可以执行as语句后的多个变量

__ exit __(selft,xxx)

退出上下文管理器时自动调用的方法
在with as 代码块执行之后执行
如果with as 代码块成功执行结束,程序自动调用该方法,如果因为异常终止,程序也自动调用该方法,使用sys.exc_info() 得到的异常信息作为调用__ exit __() 方法的参数

pickle

序列化 / 反序列化 操作
实现任意对象与文本之间的相互转化
实现任意对象与二进制之间的相互转化
实现python对象的存储与恢复

# 直接是二进制对象
dumps()
loads()

# 基于文件
dump()
load()

对大规模数据操作时,计算瓶颈

fileinput???

http://c.biancheng.net/view/2547.html

逐行读取多个文件

fileinput.input()同时打开制定的多个文件,通过for按次序读取多个文件中的数据

linecache

随机读取文件指定行
http://c.biancheng.net/view/2553.html

fnmatch

文件名匹配
功能弱与re正则表达式

5. time/calendar

https://www.byhy.net/tut/py/extra/date_time/

import time
from datetime import datetime

# 时间变成字符串形式
str(datetime.now())
datetime.now().strftime('%Y-%m-%d  %H:%M:%S'))
time.strftime('%Y-%m-%d  %H:%M:%S',time.localtime())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值