学习笔记
-
变量名只能包含字母,数字,下划线。且只能以字母或下划线开头
-
0.1 和 0.2 都要换算成二进制的才能进行计算,得到的结果也是二进制的。在二进制中,没有表示0.3的确切的数字,也就变成了我们看到的结果
0.1+0.2
0.30000000000000004
3*0.1==0.3
False -
print(“use + index:”,python_word[0]+python_word[1]+python_word[2]+"-",
end=’-----’)#以-----为结尾 -
TypeError: can only concatenate str (not “int”) to str
-
列表通过值移除元素:只有找到的第一个元素会被移除,当有多个相同值的元素时,剩下的元素不会被移除。
-
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’
-
元组可以被看成是不能改变的列表。列表是动态的,你可以增添,插入,删除,更改列表元素。有时我们需要这样的操作,但是有些时候我们需要保证有些数据是不能被用户或程序更改的。这就是元组的作用。
准确的说,列表是可变对象,元组是不可变对象。 -
print(’{}:{}’.format(key, value))
print("%s: %s" % (key.title(), kwargs[key])) -
类名必须是驼峰式的。也即每个单词的开头必须是大写的,不允许下划线的出现
-
安利Pycharm中的部分快捷键
1、Ctrl + Enter:在下方新建行但不移动光标;
2、Shift + Enter:在下方新建行并移到新行行首;
3、Ctrl + /:注释(取消注释)选择的行;
4、Ctrl+d:对光标所在行的代码进行复制。 -
sys是python的一个标准库,封装了一些系统的信息和接口
sys.argv参数:参数变量 在命令行调用时由系统传给程序 list列表
argv[0]:被调用的脚本文件名或全路径 argv[1]:传入的系统命令参数
python xxxx.py “hhhhhhh” -
cmd命令行执行.py文件与python交互模式转换:python exit()
-
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
Unicode是全国通用型编码,但比较大,ASCII编码最小,但只有英语
ord():字符->编码
chr():编码->字符
encode():str编码为指定的bytes
decode():字节流bytes解码为str -
dict:key-value查找和插入的速度极快,以空间换取时间
-
函数中定义默认参数必须指向不变对象!(例如不可指向一个List [])
函数定义可变参数:def calc(*numbers):自动组装成一个tuple
函数定义关键词参数:def person(name, age, **kw):
print(‘name:’, name, ‘age:’, age, ‘other:’, kw)
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。 -
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
Class是一种抽象概念,比如我们定义的Class——Student,是指学生这个概念,而实例(Instance)则是一个个具体的Student -
继承有什么好处?最大的好处是子类获得了父类的全部功能
当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。 -
鸭子类型
-
实例属性属于各个实例所有,互不干扰;
类属性属于类所有,所有实例共享一个属性;
不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误。 -
Python提供了pickle模块来实现序列化
pickle.dump(d,f)方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件
当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用d=pickle.load(f)方法反序列化出对象。
x=pickle.dumps(d)
pickle.loads(x)
把Python对象变成一个JSON,表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。
x=json.dumps(d)
json.loads(x) -
多进程
d=Pool(4)
for i in range(5):
p.apply_async(long_time_task,args=(i,))
p.close()//调用后不可添加新的Process
p.join()//等待所有子进程执行完毕
在Unix/Linux下,可以使用fork()调用实现多进程。
要实现跨平台的多进程,可以使用multiprocessing模块。
进程间通信是通过Queue、Pipes等实现的。 -
多线程
t=threading.Thread(target=loop,name=‘LoopThread’,args=(1,))
lock=threading.Lock()//创建一把锁
lock.acquire()//获得一把锁
lock.release()//释放锁 -
正则表达式
用\d可以匹配一个数字,\w可以匹配一个字母或数字,.可以匹配任意字符
用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:
A|B可以匹配A或B
表示行的开头,\d表示必须以数字开头。
KaTeX parse error: Expected 'EOF', got '\d' at position 8: 表示行的结束,\̲d̲表示必须以数字结束。 -
from datetime import datetime
后一个import是导入datetime类,前一个from是datetime模块
d=datetime.now()
和秒数之间的转换(不管时区):
t=d.timestamp()
datetime.fromtimestamp(t)
datetime.utcfromtimestamp(t)
str->date(注意格式):
cday=datetime.strptime(‘2018-6-1 15:25:5’,’%Y-%m-%d %H:%M:%S’)
date->str:
print(cday.strftime(’%a, %b %d %H:%M’))
加时间(导入timedelta类):
now+timedelta(days=2,hours=2)
创建一个时区utc-8:
tz=timezone(timedelta(hours=8))
将现在的时间转换为tz时区:
dt=now.replace(tzinfo=tz) -
Base64编码:base64.b64encode(b’str’)
解码:base64.b64decode(b’enstr’)//表示字节
后面网络编程啥啥的有机会再战吧
明天开始实战:)