更新时间:2022-08-13 10:28:43
摘自 Python核心编程 第三版 Wesley Chun著
0 八
0x 十六
0b 二
1.2e2
13.34e-2
3+4j
0.1-0.5j
""
''
:false*
乘,不仅可以用于数字,还可以用于字符串 ,/
除,和Java不一样,整数相除也会得到浮点数//
取整除,得到商的整数部分 ,%
取余数 ,**
幂运算 可以用来开根身份运算符
a is b
就是比较 id(a) id(b) 相同则是返回1位运算符
<< >>
左右移 & |
按位与或^ ~
按位异或 按位翻转 ** / // % +
#
多行注释:”’ ”’只有输入参数,没有选项
import sys
print("脚本名:", sys.argv[0])
for i in range(1, len(sys.argv)):
print("参数", i, sys.argv[i])
python tree.py hi op
顺序是python,第一个参数是文件,之后才是别的参数
结果>> 脚本名 tree.py 参数1 hi 参数2 op
有选项
getopt.getopt(args, options[, long_options])
import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "hi:o:")
for op, value in opts:
sys.argv[1:]
为要处理的参数列表,sys.argv[0]
为脚本名,所以用sys.argv[1:]
过滤掉脚本名。"hi:o:"
: 当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个”:”号。 opts和args
。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。 --version
--file=error.txt
getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])
序列通用操作(包含:字符串,列表,元组)
- 索引
,从左至右:0,1,2...n
从右至左:-1,-2...-n
- 切片
(截取序列的部分) temp[:]
返回一个副本
- temp[2:4]
就是[2,4)
- temp[1:]
1到最后 temp[-3:]
[-3,-1]
- temp[:4]
[0,4) temp[:-3]
[0,-3]
- 加
:lista+listb 直接连接
- 乘
:lista*4
- 判断是否存在
:in
not int
- len()
- min() max() sum() 要求元素全是数值
append()/extend()
尾部加入元素/列表 insert(index, "")
元素插入到任意位置,其后元素后移del list[2]
/ remove("apple")
/pop(index) index为空指最后一个
sort(reverse=True) z-a
列表全是字符串才可r"d:\python27\"
r前缀表示转义字符看成普通字符temp = "python" temp[0]
结果:p temp.index("p")
结果是:0index('s')
找到s字符的下标find('s',[start,end])
找s的下标,只有一个整数参数则是startreplace('s','v')
替换count('sd')
计数split('')
正则切分 空参数默认是空格join('')
列表转化成字符串的方法cmp(str1,str2)
比较两个字符串是否相等+
进行拼接 可以拼接字符串 列表a in b
判断a是否在b里存在*
重复序列 例如 print "-"*20
就会输出20个 - b = "www.github.com"
c = b.split(".")
"#".join(c)
实现了将字符串的 . 换成了#"i am %s %d" % ("python",67)
%s %d %f 和C语言一样占位符 "i am {0} {1} ..".format(23,"ret")
"i am {name} {age} ..".format(age=23,name="ret")
title()
首字母大写 字符串,列表,元组相互转换:
- 字符串-列表 : list(“python”)
- 字符串-元组:tuple(“python”)
- 列表或元组-字符串 join(obj) 参数是列表或元组类型,其元素只能是字符串类型
encode("utf-8")
: str -> bytes
decode()
: bytes -> str # coding:utf-8
unicode_str = unicode('使用',encoding='utf-8')
print unicode_str.encode('utf-8')
import codecs
codecs.open('filename',encoding='utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 2: invalid start byte
dict['a'] = 2323
del dict['name']
{'d':['we','e']}
for in
while
例如:for i in range(1,10,2):
范围 [1,10) 增量为2while True:`` while ‘2’ in nums:`` while num<2:
while 列表:
直到列表为空退出循环 if (b==0) and (a==1) :
pass
print("pass")
else:
print("Hi")
形参赋值传递方式
就是直接用看起来和Java一样,但不是按类型和位置,只是位置
create(name='df')
def create(name='df')
list[:]
以下两种情况(* 和 **),都必须放在形参列表的最后 (两者同时使用时:* 只能在 ** 前 )
create(age, *name)
create(12, 's','d')
元组
不能指定没有的名称 错误:create(12,d=2, 2,3,4)create(age, **name)
create(12, name='d', lo=23)
字典
def hi(name, age=0, *names, **s)
hi('d', 23,34, d=6)
age会被赋值23def hi(name, *names, age=0, **s)
hi('d', 23,34, d=6)
这样写age就不会赋值,除非指定名称 age=23返回值
将函数写在一个py文件里,然后导入 import 文件名
,名曰导入模块
import creat as fun
给模块加别名from create import create_aliens, type_button
多个就,分隔 同理 as给函数加别名 * 通配所有sys.setrecursionlimit(10000000)
global x
声明引用全局变量xPython 不存在多态,存在鸭子类型
博客介绍
- 写在一个py文件里,默认构造器,可以加参数 def __init__(self):
self.name
,在任何方法中声明过即可__name
私有的类属性, 类不能访问对象属性 class People:
name = 'md'
p = People()
p.name = 'gh' # 声明了实例属性覆盖了类属性
del p.name # 删除实例属性,恢复类属性引用
方法:
__
开头是私有的,只能在对象的公有方法中self.__
引用构造函数和析构函数:
def __init__(self)
def __del__(self)
class Person:
# 对象方法, 将对象作为参数self传进去
def say(self):
print('hi')
# 静态方法
@staticmethod
def drink():
print('static method')
# 类方法,将类作为参数cls传进去
@classmethod
def eat(cls):
print('class method')
特别不舒服 init 这种命名 不像Java的构造函数重载,这个就是后面覆盖前面定义的init 不管形参列表
导入和函数一样 注意继承中类的依赖
Python是支持多重继承的
同文件 父类定义要在子类之前
父类的构造器不会自动调用,需要显式使用父类构造器:
super(子类名, self).__init__(参数)
super().__init__(参数)
父类名.__init__()
重写父类方法:只需要定义一个和父类方法同名的方法即可,因为没有多态,覆盖时形参不作考虑
多态:
__add__(self, x)
减__sub__(self, x)
try:
print(5/0)
except ZeroDivisionError:
print("0 不能做除数")
else:
print("成功")
finally:
print('finally')
try except else finally
except 分句使用形式 | 说明 |
---|---|
except | 捕获所有类型 |
except name | 只捕获指定类型 |
except name, value | 捕获指定类型,并获得抛出的异常对象 |
except (name1, name2) | 捕获列出的异常 |
except (name1, name2), value | 捕获列出的异常,获得抛出的异常对象 |
- raise 语句 和Java的throw关键字 一致 , 不过raise只是抛出一个通用异常类型 Exception
- dir(exceptions) 查看所有异常类型
- raise name 手动引发异常
- raise name,data 传递一个附加的数据
- 同样的也是可以自定义异常类型的,class MyExcetion(Exception):
- with 语句 在异常处理中,将 try except finally 关键字以及与资源分配释放相关的代码省略掉。
- 文件打开 with open('a.py') as files:
常见异常类 | 描述 |
---|---|
NameError/UnboundLocalError | 引用不存在的变量/或者引用在声明之前 |
ZeroDivisionError | 除数为0 |
SyntaxError | 语法错误 |
IndexError | 索引错误 |
KeyError | 使用不存在的字典关键字 |
IOError | 输入输出错误 |
ValueError | 搜索列表中不存在的值 |
AtrributeError | 调用不存在的方法 |
TypeError | 未强制转换就混用数据类型 |
EOPError | 文件结束标识错误 |
file = open('')
只读打开使用with来操作 好处是Python自动关闭文件
with open('filename') as name:
name.read()
file = open('a.txt','w+'[,coding='utf-8'])
打开删空file.write('')
os模块
os.rename('filename1','filename2')
mv os.remove('filename.py')
rmos.listdir(path)
ls os.getcwd()
pwdos.makedirs(r'path')
mkdiros.chdir('')
改变一个目录os.rmdir('')
删除该目录,前提是空目录os.path模块
shutil模块
b 表示字节流(二进制文件) 不加表示字符流(文本文件)
方式 | 意义 | 当存在 | 当不存在 |
---|---|---|---|
r | 只读打开 | 打开 | 返回空指针 |
w | 只写打开新 | 打开删空 | 新建打开 |
a | 追加打开 | 打开 | 新建打开 |
r+ | 读打开可写 | 打开 | 返回空指针 |
w+ | 写打开新可读 | 打开删空 | 新建打开 |
a+ | 追加打开可读 | 打开 | 新建打开 |
rb | 只读打开 | 打开 | 返回空指针 |
wb | 只写打开新 | 打开删空 | 新建打开 |
ab | 追加打开 | 打开 | 新建打开 |
rb+ | 读打开可写 | 打开 | 返回空指针 |
wb+ | 写打开新可读 | 打开删空 | 新建打开 |
ab+ | 追加打开可读 | 打开 | 新建打开 |
json
alien = {'color': 'green', 'age': '23'}
files = 'a.json'
with open(files, 'w') as o:
json.dump(alien, o)
data = json.load(files)
# 引用
data['root']['name']
. 测试通过
E 测试运行错误
F 测试断言不通过
安装
- python2: sudo apt install python-tk
- python3: sudo apt install python3-tk
引入
- python2:import Tkinter
import Tkinter as tk
from Tkinter import *
- 但是python3.5的环境下,import tkinter
才是正确的
sudo apt install python3-mysqldb
sudo apt install libmysqlclient-dev
sudo pip install mysql-python
sudo pip install redis
sudo pip3 install redis
python 3.5 安装
sudo apt install python3-matplotlib
sudo apt install python3.5-dev python3.5-tk tk-dev
sudo apt install libfreetype6-dev g++
巨坑: tab和空格不能混用,如果你复制别人的代码是tab,自己敲空格,就会缩进错误!!!!, 天灭tab空格保平安, 要不是kate编辑器显示了tab字符,找半天都不知道错在哪
id()
查看内存地址help(方法名)
展示方法的说明文档dir(对象)
展示对象的方法API import time
import shlex
import datetime
import subprocess
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
"""执行一个SHELL命令
封装了subprocess的Popen方法, 支持超时判断,支持读取stdout和stderr
参数:
cwd: 运行命令时更改路径,如果被设定,子进程会直接先更改当前路径到cwd
timeout: 超时时间,秒,支持小数,精度0.1秒
shell: 是否通过shell运行
Returns: return_code
Raises: Exception: 执行超时"""
if shell:
cmdstring_list = cmdstring
else:
cmdstring_list = shlex.split(cmdstring)
if timeout:
end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
#没有指定标准输出和错误输出的管道,因此会打印到屏幕上;
sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
#subprocess.poll()方法:检查子进程是否结束了,如果结束了,设定并返回码,放在subprocess.returncode变量中
while sub.poll() is None:
time.sleep(0.1)
if timeout:
if end_time <= datetime.datetime.now():
raise Exception("Timeout:%s"%cmdstring)
return str(sub.returncode)
qt4-dev-tools 中包括了Qt Assistant,Qt Linguist,Qt Creator
qt4-doc 这个是帮助文档
qt4-qtconfig Qt的配置工具,这个装好默认好
qt4-demos 官方的一些Demo
qt4-designer 可视化窗体设置工具