python3.x 基础一
1.python 格式化print
#/usr/bin/env python #-*- coding: utf-8 -*- #Author:jenvid.yang # 连接符号+,可以连接多个变量或者需要描述内容,连接符号中间并不会产生空格 # 尽量不用连接符号+,每次连接需要开辟内存空间 print('hello' + 'world!') print('hello' + ' world!') # helloworld! # hello world! # 占位符,%s字符输出,%d整形输出,%f浮点型输出 # 常用,只开辟一次内存空间 num1=1 num2=2.2 num3=3 name='yzw' print('num1 is %d, num2 is %f, num2 is %d, num3 is %f,name is %s' % (num1,num2,num2,num3,name)) # num1 is 1, num2 is 2.200000, num2 is 2, num3 is 3.000000,name is yzw # 小数点保留0.2或者.2表示保留2位小数点 print('num2 is %0.2f, num3 is %.3f' % (num2,num3)) # num2 is 2.20, num3 is 3.000 # 占位符宽度,常用对齐,%n表示左边补空格+原字符串个数共占n, print('name is %10s' %(name)) print('name is %8s' %(name)) print('name is %6s' %(name)) print('name is %s' %(name)) #name is yzw # name is yzw # name is yzw # name is yzw # -号表示右边留空 print('name is %-10s,%d' %(name,num1)) # name is yzw , # format格式输出,format(数值, '格式'),花括号表示输出顺序,与format里面变量一致 print ('{0} {1}:{2}'.format(num1,num2,num3)) # 1 2.2:3
print显示颜色
格式:\033[显示方式;字体颜色;背景颜色m 需要输出的内容 [\033[0m
------------------------------------------- 字体色 | 背景色 | 颜色描述 ------------------------------------------- 30 | 40 | 黑色 31 | 41 | 红色 32 | 42 | 绿色 33 | 43 | 黃色 34 | 44 | 蓝色 35 | 45 | 紫红色 36 | 46 | 青蓝色 37 | 47 | 白色 -------------------------------------------
-------------------------------
显示方式 | 效果 ------------------------------- 0 | 终端默认设置 1 | 高亮显示 4 | 使用下划线 5 | 闪烁 7 | 反白显示 8 | 不可见
-------------------------------
2.while/for...else
- break结束最近的循环
- continue结束当次循环,继续最近循环的下一次循环
- 其他语言好像没有else子句
- 循环结束判断条件常用语循环体内最后增加技术方法
#/usr/bin/env python #-*- coding: utf-8 -*- #Author:jenvid.yang count = 0 num2 = 2 while count < 3: num1 = int(input('pls guest a number:')) if num1 > num2: print('bigger') elif num1 < num2: print('smaller') else: print('bingo I am if else') break count+=1 else: print('I am while else') # I am if else # while循环内部只要成功执行一次,同级别else不执行 # pls guest a number:1 # smaller # pls guest a number:3 # bigger # pls guest a number:2 # bingo I am if else # while循环内部if判断全失败,则执行else # pls guest a number:1 # smaller # pls guest a number:1 # smaller # pls guest a number:1 # smaller # I am while else # for...else一样,记忆方法:while/for...else有且只有一个执行
3.模块sys
- sys.path查看lib默认环境变量
>>> import sys >>> l_env = sys.path >>> for i in l_env: ... print(i) ... /usr/lib/python35.zip /usr/lib/python3.5 /usr/lib/python3.5/plat-x86_64-linux-gnu /usr/lib/python3.5/lib-dynload /usr/local/lib/python3.5/dist-packages /usr/lib/python3/dist-packages
- sys.path.append添加自定义路径
>>> print(sys.path) ['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages'] >>> sys.path.append("/root/") >>> print(sys.path) ['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '/root/']
- 通过在/usr/local/lib/python3.5/dist-packages (ubuntu)下增加xxx.pth 加入自定义路径
root@T450:/usr/local/lib/python3.5/dist-packages# cat custom.pth /home/yangzhenwei import sys l_env = sys.path for i in l_env: print(i) print (sys.path) #默认全局环境变量 /usr/bin/python3.5 /root/PycharmProjects/S14/day02/sys_mod.py /root/PycharmProjects/S14/day02 /root/PycharmProjects/S14 /usr/lib/python35.zip /usr/lib/python3.5 /usr/lib/python3.5/plat-x86_64-linux-gnu /usr/lib/python3.5/lib-dynload /usr/local/lib/python3.5/dist-packages /home/yangzhenwei /usr/lib/python3/dist-packages
- sys.argv[0]
- 如果是在命令行中执行,则返回一个空的字符串 在pycharm中执行,则返回当前py文件的全路径文件名
>>> cmd1=sys.argv[0] >>> print(type(cmf1)) >>> print(type(cmd1)) <class 'str'> >>> print(cmd1)
- 在命令行中执行py文件,取外部参数
import sys print(sys.argv[0]) print(sys.argv[1]) print(sys.argv[2]) #python sys_mod.py 1 2 3 sys_mod.py 1 2
4.模块os
- os.system执行shell命令,但是不保存结果
>>> import os >>> cmd_res = os.system("df -h") 文件系统 容量 已用 可用 已用% 挂载点 udev 3.8G 0 3.8G 0% /dev tmpfs 769M 9.5M 759M 2% /run /dev/sda5 230G 214G 5.2G 98% / tmpfs 3.8G 56M 3.7G 2% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup tmpfs 769M 72K 769M 1% /run/user/1000 >>> print(cmd_res) 0
- os.popen执行shell命令,返回内存地址
>>> cmd_res1 = os.popen("df -h") >>> print(cmd_res1) <os._wrap_close object at 0x7ff0760c44e0> >>>
- os.open().read(),执行shell命令,保存结果/返回打印内容
>>> cmd_res2 = os.popen("df -h").read() >>> print(cmd_res2) 文件系统 容量 已用 可用 已用% 挂载点 udev 3.8G 0 3.8G 0% /dev tmpfs 769M 9.5M 759M 2% /run /dev/sda5 230G 214G 5.2G 98% / tmpfs 3.8G 56M 3.7G 2% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup tmpfs 769M 72K 769M 1% /run/user/1000
- os.mkdir 在当前目录创建一个目录,如果已经存在,则报错
- mkdir(path, mode=511, *, dir_fd=None),可以指定os权限
- os.rmdir 在当前目录删除指定目录,如果目录内有文件,则报错
- 导入自定义模块
- 首先增加自定模块,准备导入day01_login_03.py
-
root@T450:/usr/local/lib/python3.5/dist-packages# cat custom.pth /home/yangzhenwei /root/PycharmProjects/S14/day01/bin
- 导入到自定义py文件里面如果有相对路径,会自动变成本py的相对路径
#/usr/bin/env python
#-*- coding: utf-8 -*-
#Author:jenvid.yang
import day01_login_03
usercontent = open('../config/users.inf', 'r') FileNotFoundError: [Errno 2] No such file or directory: '../config/users.inf' - 暂时复制相关文件到相对目录
-
python3.5 import_custom_mod_py.py pls input your name:alex pls input your password: your username or password is invalid,pls reinput! pls input your name:ale pls input your password: your username or password is invalid,pls reinput! pls input your name:alex pls input your password: welcome login system alex
- pyc,预编译文/部分编译,第一次运行py文件会将结果存到该文件,二次运行比较源文件和编译文件时间戳,决定是否重新解释执行源文件
5.str.isdigit
- 判断字符是否全部由数字组成,否则为false
-
>>> a='111' >>> a.isdigit() True >>> b='aa11' >>> b.isdigit() False
6.is(is not)运算符
- 用于判断一个对象是否是某种类型
-
>>> type('11') is str True >>> a=[1,2] >>> type(a) is list True
root@T450:/usr/local/lib/python3.5/dist-packages# cat custom.pth /home/yangzhenwei /root/PycharmProjects/S14/day01/bi
7.二进制位运算
- a 为 60,b 为 13
-
a = 0011 1100 b = 0000 1101
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
- &真真为真,|真假为真,^相异为真,~真假互换,<<左移丢高补低,>>右移丢低补高
8.三元运算
- 值=a if a > b else c,条件为真取a,否则取c
-
>>> a,b,c=1,2,3 >>> a if a>b else c 3 >>> b if a<b else c 2
9.字符与bytes转换
- str->encode->bytes,bytes->decode->str
- 3.x网络传输必须是二进制,2.x可以是zifuchuan
- 默认编码encodeing=('utf-8')
>>> msg1='水电费水电费' >>> msg2='asdfasdf' >>> print(msg1.encoding=('utf-8')) b'\xe6\xb0\xb4\xe7\x94\xb5\xe8\xb4\xb9\xe6\xb0\xb4\xe7\x94\xb5\xe8\xb4\xb9' >>> print(msg2.encoding=('utf-8')) b'asdfasdf'
>>> print(msg1.encode(encoding='utf-8').decode(encoding='utf-8'))
水电费水电费
10.数据类型list
- 排序/反转操作原列表
- pop默认弹出最后一个元素
- 赋值直接给下标
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
>>> city=[] >>> city.append('guangzhou') >>> city ['guangzhou'] >>> city.append('foshan') >>> city ['guangzhou', 'foshan'] >>> city.insert(0,'dongguan') >>> city ['dongguan', 'guangzhou', 'foshan'] >>> city[0] 'dongguan' >>> city[0-1] 'foshan' >>> city[-1] 'foshan' >>> city.insert(1,'zhuhai') >>> city ['dongguan', 'zhuhai', 'guangzhou', 'foshan'] >>> city[::-2] ['foshan', 'zhuhai'] >>> city[::2] ['dongguan', 'guangzhou'] >>> city.pop() 'foshan' >>> city ['dongguan', 'zhuhai', 'guangzhou'] >>> city.remove('dongguan') >>> city ['zhuhai', 'guangzhou'] >>> city.sort() >>> city ['guangzhou', 'zhuhai']
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
>>> city.reverse() >>> city ['beijing', 'guangzhou', 'zhuhai'] >>> city[0]='shenzhen' >>> city ['shenzhen', 'guangzhou', 'zhuhai']
- copy 浅复制,只复制第一层,深复制导入copy模块,用deepcopy方法
- 多层嵌套的时候,内部是内存地址/指针,因此改一个全部改
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
>>> city ['shenzhen', 'guangzhou', 'zhuhai'] >>> city1=['chongqing','chengdu'] >>> city.extend(city1) >>> city ['shenzhen', 'guangzhou', 'zhuhai', 'chongqing', 'chengdu'] >>> city2=['shanghai','hangzhou'] >>> city[1]=city2 >>> city ['shenzhen', ['shanghai', 'hangzhou'], 'zhuhai', 'chongqing', 'chengdu'] >>> city3=city.copy() >>> city3 ['shenzhen', ['shanghai', 'hangzhou'], 'zhuhai', 'chongqing', 'chengdu'] >>> city3[1][0]='SHANGHAI' >>> city ['shenzhen', ['SHANGHAI', 'hangzhou'], 'zhuhai', 'chongqing', 'chengdu'] >>> city3 ['shenzhen', ['SHANGHAI', 'hangzhou'], 'zhuhai', 'chongqing', 'chengdu'] >>> city[0]='Shenzhen' >>> city ['Shenzhen', ['SHANGHAI', 'hangzhou'], 'zhuhai', 'chongqing', 'chengdu'] >>> city3 ['shenzhen', ['SHANGHAI', 'hangzhou'], 'zhuhai', 'chongqing', 'chengdu'] >>>
- 补充浅copy
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
>>> import copy >>> person=['name',['age',100]] >>> p1=copy.copy(person) >>> p2=person[:] >>> p3=list(person) >>> print(p1,p2,p3) ['name', ['age', 100]] ['name', ['age', 100]] ['name', ['age', 100]] >>> print(id(p1),id(p2),id(p3)) 140006071338632 140006094074952 140006094157064
- list.index('value')获取某个元素的下标
11.数据类型元组tuple
- 元组不能更改,只读列表
12. 列表索引获取enumerate
>>> list1=['a','b','c','d'] >>> for key,values in enumerate(list1): ... print(key,values) ... 0 a 1 b 2 c 3 d
13.数据类型字符串str
http://www.cnblogs.com/jenvid/p/7808498.html
14.数据类型字典dict
http://www.cnblogs.com/jenvid/p/7809329.html
15.未完待续