注意事项+对比详解。
一、python
1、小知识点。
1)Ture/False首字母必须大写。
2)编码格式
#-*- coding:UTF-8 -*- 表示支持UTF-8中文。需要加双引号。
U'中文' /u'中文' 表示unicode创建实例的格式显示中文。为str类,例print(U'中文')输出中文。python3默认编码为unicode,由str类型进行表示。
字符串前加 r表示一个普通的字符串。
b" "前缀表示:后面字符串是bytes 类型。
Encode ("utf-8") 表示以UTF-8编码对对象进行编码,获取byte类型对象。
Decode ("utf-8") 表示以UTF-8编码对对象进行解码,获取字符串对象。
新版本的python3中,取消了unicode类型,代替它的是使用unicode字符的字符串类型(str),字符串类型(str)成为基础类型如下所示,而编码后的变为了字节类型(bytes)但是两个函数的使用方法不变:
decode encode
bytes ------> str(unicode)------>bytes
u = '中文' #指定字符串类型对象u str = u.encode('gb2312') #以gb2312编码对u进行编码,获得bytes类型对象str u1 = str.decode('gb2312')#以gb2312编码对字符串str进行解码,获得字符串类型对象u1 u2 = str.decode('utf-8')#如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的字符串内容
ASCII全程American Standard Code for Information Interchange,美国信息交换标准代码。7位表示,共128个字符。
ISO8859-1:又称Latin-1,8位,最高位也用了,兼容ASCII,128+128个字符。
简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,英文一个字节,兼容iso8859-1。
Unicode,是一种所有符号的编码。现在的规模可以容纳100多万个符号。问题:没有规定二进制代码如果存储,计算机如何知道三个字节表示一个符号还是表示三个符号;英文一个字节表示一个符号,如果unicode三个字节表示一个符号,前两个字节填充0,资源浪费,不便于传输和存储。unicode对于英文字母需要2个字节表示。
UTF-8是Unicode的实现方式之一,可用来表示所有语言的字符。全称8-bit Unicode Transformation Format,兼容iso8859-1编码。是一种变长的编码方式,可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。一般使用UTF-8,虽然unicode汉字2字节/UTF-8汉字3字节,但是unicode英文2字节/UTF-8英文1字节。
UTF-8规则:
a)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
b)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
Unicode符号范围 | UTF-8编码方式
1 | (十六进制) | (二进制) |
----------------------+--------------------------------------------- 0000 0000-0000 007F | 0xxxxxxx 0000 0080-0000 07FF | 110xxxxx 10xxxxxx 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
例:已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。
windows默认是GBK,Linux默认是UTF-8。
3)time相关
time.localtime()
#输出time.struct_time(tm_year=2024, tm_mon=9, tm_mday=23, tm_hour=21, tm_min=26, tm_sec=43, tm_wday=0, tm_yday=267, tm_isdst=0)
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
#输出2024-09-23 21:30:20
#datetime.date.today输出当前时间2024-10-03,date(1111,2,3)可以对输入的时间进行运算。
import datetime print(datetime.date.today()) print(datetime.date(2333,2,3)) print(datetime.date.today().strftime('%d/%m/%Y')) day=datetime.date(1111,2,3) day=day.replace(year=day.year+22) print(day)
2、方法
1)dir(object) //类的方法。
2)object.mro() //object类的父类和本类。
3)enumerate(sequence,[start=0]) //将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。返回 enumerate(枚举) 对象。
a=[1,2,'a'] b='adnscd' num1=list(enumerate(a)) num2=list(enumerate(b,2)) print(num1) print(num2) 结果: [(0, 1), (1, 2), (2, 'a')] [(2, 'a'), (3, 'd'), (4, 'n'), (5, 's'), (6, 'c'), (7, 'd')]
4)string.endswith() 判断文件类型,有些时候还会对字符串进行操作应用。例string.endswith('.py')判断string是否带有.py;
string.endswith(str, beg=[0,end=len(string)])
string[beg:end].endswith(str)
相关函数:判断字符串开头 startswith()
5)rfind() 返回字符串最后一次出现的位置,如果没有匹配项则返回 -1
str.rfind(str, beg=0 end=len(string))
6)reversed()返回一个反转的迭代器。
reversed(seq) //seq -- 要转换的序列,可以是 tuple, string, list 或 range。
>>> a=('as23') >>> list(reversed(a)) ['3', '2', 's', 'a']
7)int()函数
用于将一个字符串或数字转换为整型;
class int(x, base=10) //x为字符串数字或数字;base进制,默认10进制。返回数字。
>>> int(10) 10 >>> int('010',8) 8 >>> int(10) 10 >>> int('0x10',16) 16 >>> int('10',2) 2 >>> int('10',8) 8 >>> int('10',16) 16 >>> int('10',10) 10
8)random.randint(start,stop)
返回指定范围的整数,randint(1,9)返回1-9的整数,两个参数均为必须。等价于randrange(start,stop+1)
3、__init__和__new__对比
1)相同:都是构造方法。
2)__init__(self,name...):
用于初始化对象,实例方法;是当实例对象创建完成后被调用的,用于初始化一个类实例;self指刚建好的实例对象;self指__new__返回的实例,__init__在__new__基础上完成一些其他初始化的动作,__init__不需要有返回值;
3)__new__(cls,*args,**kwargs):
用于创建对象,静态方法;必须要有参数cls,cls指类对象;在实例创建之前被调用的,用于创建实例,然后返回该实例对象;必须要有返回值,返回的是实例化出来的实例,两种return:return super(父类,cls).__new__(cls)或object.__new__(cls)。
4)__new__先被调用,__new__的返回值将传递给__init__方法的第一个参数,然后__init__被调用,给这个实例设置一些参数。
5)如果__new__没有返回cls(即当前类)的实例,那么当前类的__init__方法是不会被调用的。
6)如果当前类是直接继承自 object,那当前类的 __new__() 方法返回的对象应该为:
def __new__(cls, *args, **kwargs): ... return object.__new__(cls) #传入参数是类对象,所以创建类的实例对象时(在不重写基类__new__方法的前提下),返回的就是是类的实例对象
4、模块引用
import python文件名.类
from 类 import 模块
import sys,math,time as o //别名o指time
1)__import__函数使用,对于python2/3有差异。
s='math' m=__import__('math') print(__import__('math').pi) //或者print(m.pi)。 3.1415...
2)importlib使用,对于python2/3无差别。
import importlib a=importlib.import_module('math') print(a.pi)
3)多个模块一个别名,是最后一个的别名。自定义目录下的模块引用,eclipse会报错,不影响结果。
import math,demo01.pydemo,sys as o print(o.argv[0]) import sys sys.path.append('/Users/姓名/min-py') print(sys.path) //sys.path特指模块的查询路径的列表,后添加自定义的路径。 from demo00 import Student s=Student('min',16) print(s.say_age())
输出:
b1661865162.0244968 gao的年纪是18 c1661865162.0245419 33 以上四行为demo01.pydemo模块输出的结果。 /Users/姓名/eclipse-workspace/pydemo01/demo01/pydemo07.py //sys.argv[0]表示代码本身文件路径 ['/Users/姓名/eclipse-workspace/pydemo01/demo01', '/Users/姓名/eclipse-workspace/pydemo01', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Users/姓名/min-py'] min的年纪是16 None
4)模块的本地发布
模块相同目录下创建setup.py
from distutils.core import setup from lxml.html._diffcommand import description setup( name='mypython01', version='1.0', description='第一个', author='min', author_email='.163.com', py_modules=['pydemo01','pydemo02'] #要发布的模块 )
cd 到模块目录下,执行python3 setup.py sdist
sdist create a source distribution (tarball, zip file, etc.)
[localhost:demo02 $ python3 setup.py sdist running sdist running check warning: check: missing required meta-data: url warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list) warning: sdist: standard file not found: should have one of README, README.txt, README.rst writing manifest file 'MANIFEST' creating mypython01-1.0 making hard links in mypython01-1.0... hard linking pydemo01.py -> mypython01-1.0 hard linking pydemo02.py -> mypython01-1.0 hard linking setup.py -> mypython01-1.0 creating dist Creating tar archive removing 'mypython01-1.0' (and everything under it) localhost:demo02 $ ls MANIFEST dist pydemo02.py __init__.py pydemo01.py setup.py localhost:demo02 $ cd dist/ localhost:dist $ ls mypython01-1.0.tar.gz localhost:dist $ cd .. localhost:demo02 $ cat __init__.py localhost:demo02 $ cat MANIFEST # file GENERATED by distutils, do NOT edit pydemo01.py pydemo02.py setup.py
生成__init__.py/dist文件下压缩包mypython01-1.0.tar.gz/MANIFEST 下文件列表。
5)第三方模块的安装
localhost:demo02 $ python3 setup.py install running install running build running build_py creating build creating build/lib copying pydemo01.py -> build/lib copying pydemo02.py -> build/lib running install_lib copying build/lib/pydemo01.py -> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages copying build/lib/pydemo02.py -> /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages byte-compiling /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pydemo01.py to pydemo01.cpython-37.pyc byte-compiling /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pydemo02.py to pydemo02.cpython-37.pyc running install_egg_info Writing /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mypython01-1.0-py3.7.egg-info localhost:demo02 $ cd /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages
mac第三方模块安装在:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages
可以直接import pydemo01,pydemo02使用
5、库
某个功能的‘模块的集合’成为库。
python标准库的主要功能有:
1)文本处理,包括文本格式化/正则表达式匹配/文本差异计算与合并/unicode支持/二进制数据处理等功能。
2)文件处理,包含文件操作/创建临时文件/文件压缩与归档/操作配置文件等功能。
3)操作系统功能,包含线程与进程支持/IO复用/日期与时间处理/调用系统函数/日志等功能。
4)网络通信,包含网络套接字/SSL加密通信/异步网络通信等功能。
5)网络协议,支持HTTP/FTP/SMTP/POP/IMAP/NNTP/XMLRPC等多种网络协议,并提供编写网络服务器的框架。
6)W3C格式支持,包括HTML/SGML/XML的处理。
7)其他功能,包括国际化支持/数学运算/HASH/Tkinter等。
6、使用pycharm工具跑python
1)限制:只能执行main文件
2)新建python文件,例demo.py
3)在main.py里
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!