Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助 pprint 关键字
Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助 pprint 关键字
目录
Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典
Python第四天 流程控制 if else条件判断 for循环 while循环
Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数
Python第七天 函数 函数参数 函数变量 函数返回值 多类型传值 冗余参数 函数递归调用 匿名函数 内置函数 列表表达式/列表重写
Python第八天 模块 包 全局变量和内置变量__name__ Python path
Python第九天 面向对象 类定义 类的属性 类的方法 内部类 垃圾回收机制 类的继承 装饰器
Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 标准错误 重定向 输出流和输入流
Python第十二天 收集主机信息 正则表达式 无名分组 有名分组
Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python变量
变量的命名
- 变量名由字母、数字、下划线组成。
- 变量不能以数字开头
- 不可以使用关键字
- a a1 _a
变量的赋值
- 是变量的声明和定义的过程,等号两边可以有空格,而bash等号两边不能有空格
a = 1
id(a)
变量不需要声明,根据所赋值内容决定变量的数据类型
aa是整型
>>> aa=3
>>> aa
3
非数字要用引号括起来,否则会认为是变量
abc = ccc 报错 NameError: name 'ccc' is not defined
ab = 'ddd' 正确
>>> ab = 'ddd'
>>> print ab
ddd
运算符与表达式
Python运算符包括
- 赋值运算符
我只说一句:Python 解释器所有的变量之间赋值都是采用的浅拷贝方案,浅拷贝就是把赋值运算符=右边的变量里面所指向值的内存地址直接赋值给左边的变量,函数默认参数里传引用和传值,对可变类型传引用,不可变类型传值
深拷贝是开辟新内存地址,来存储值,跟赋值运算符=右边的变量完全独立
=:x = 3, y = ‘abcd’
+=: x += 2
-=:x -= 2
*=:x *= 2
/=: x /= 2
%=:x %= 2
- 算术运算符
+
-
*
/ 除法,有小数
// 整除,没有小数
%
** 乘方 2**3=8 表示2的3次方
- 关系运算符
> :1 > 2
< :2 < 3
>=:1 >= 1
<=:2 <= 2
==:2 == 2
!=: 1 != 2
- 逻辑运算符,用于布尔型True和False
and逻辑与: True and False
or逻辑或: False or True
not逻辑非: not True
- 位运算符
虽然平时很少用到位运算符
& 按位与运算(双目运算:当对应的两个二进制位都为 1 则结果为 1,否则结果为 0) b & a 结果为 3
❘ 按位或运算(双目运算:当对应的两个二进制位有一个为 1 则结果为 1,否则结果为 0) b ❘ a 结果为 7
^ 按位异或运算(双目运算:当对应的两个二进制位不同时 则结果为 1,否则结果为 0) b ^ a 结果为 4
~ 按位取反运算(单目运算:对数据的每个二进制取反,既把 1 变为 0, 把 0 变为 1) ~a 结果为 -8
<< 左移运算(单目运算:运算数据的各个二进制位全部左移, << 符号右边数字指定了移动的位数,高位丢弃,低位补 0 a << 3 结果为 28
>> 右移运算(单目运算:运算数据的各个二进制位全部右移, >> 符号右边数字指定了移动的位数,低位丢弃,高位补 0
成员运算符
in 如果 val 的值在 strone 中存在返回 True,否则返回 False
not in 如果 val 的值在 strone 中不存在返回 True,否则返回 False
身份运算符
身份运算符判断的是两个变量指向的对象的内存地址是否相同,Python 语言用 id 函数来获取变量指向的对象内存地址
is 判断两个标识符是不是引用同一个对象
is not 判断两个标识符是不是引用不同对象
三目运算符
在 python 语言中三目运算符的表示方式是:为真时的结果 if 判定条件 else 为假时的结果。
score = 59
print("ok" if score >= 60 else "no")
表达式是将不同的数据(包括变量、函数)用运算符号按一定规则连接起来的一种式子。
数字类型小于任何其他非数字类型,所以也小于字符串类型。
字符串之间的比较,从左到右,先比较第一个字符,如果第一个字符一样,再比较第二字符,依次进行比较
那么字符之间比较的原则是根据ACSII,'a'的ASCII值是97,ord('a')是97,ord('A')是65,所以’a' > 'A'。
那么’4‘与’35'哪个大?
input()与raw_input()区别
input()与raw_input()返回值都是字符串
input() 输入的内容不能是字符,否则会当成变量
raw_input() 输入的内容不受限制,不会自动加raw strings,不会在字符串前加r,不要误会了
#!/usr/bin/python
#encoding:utf8
num1 = input("请输入数字: ")
num2 = input("Please input a number: ")
print "%s + %s = %s" % (num1, num2, num1+num2)
print "%s - %s = %s" % (num1, num2, num1-num2)
print "%s * %s = %s" % (num1, num2, num1*num2)
print "%s / %s = %s" % (num1, num2, num1/num2)
print "%s " % num1
print "%.2f" % (int(free)/1024.0)+'M'
字符串格式化(%-formatting语句、str.format()函数、f-strings)
在Python中存在两种格式化字符串的方法,即%-formatting语句和str.format()函数。%表达式从Python 诞生之日就开始存在了,是基于C语言的printf 模型,目前还广泛使用。
format函数是Python 2.6 和Python 3.0 新增加的技术,是Python独有的方法,并且和%-formatting语句的功能有不少的重叠。虽然%表达式目前还广泛使用
但是, format 函数才是字符串格式化的未来,%表达式在Python 未来的版本中可能会废弃
%表达式,%-formatting语句
%表示格式化字符串的格式符号。
%s方式格式化会有元组的问题,需要用.format方式才能解决,https://segmentfault.com/q/1010000000334606
%s,格式化字符串,字符,如果只有一个字符,通常不用括号,格式化之后变为字符串
%d,表示整数的字符串,格式化字符串,数字,如果只有一个字符,通常不用括号,格式化之后变为字符串
%x,表示16进制的字符串
%f,表示浮点数字符串,%.2f ,.2表示显示几位小数,如果只有一个字符,通常不用括号,格式化之后变为字符串,所以可以用+号连接'M'
%r,表示用rper()方法处理对象,打印时能够重现它所代表的对象(rper() unambiguously recreate the object it represents),https://www.jb51.net/article/108589.htm
示例 import sys i =10 sys.stdout.write("str:%d" %i) import sys i ='10' sys.stdout.write("str:%s" %i) 字典 import sys i ='10' print "str:%(key)s" % {'key':i} import sys i =10 sys.stdout.write("str:%02f" %i)
format()函数
使用str.format()函数
格式控制
format函数精度,符号,宽度,对齐方式,字符填充,逗号分隔进行测试
print ('6:\t|{0:b}'.format(3))
print ('7:\t|{0:c}'.format(3))
print ('8:\t|{0:d}'.format(3))
print ('9:\t|{0:o}'.format(3))
print ('10:\t|{0:x}'.format(3))
print ('11:\t|{0:e}'.format(3.75))
print ('12:\t|{0:g}'.format(3.75))
print ('13:\t|{0:n}'.format(3.75))#浮点数
print ('14:\t|{0:n}'.format(3)) #整数
print ('15:\t|{0:%}'.format(3.75))
"{:.2f }".format(3.1415926)
'3.14'
"{:+.2f}".format(3.1415926)
'+3.14'
"{:10.2f}".format(3.1415926)
'3.14'
"{:^l0.2f}".format(3.1415926)
' 3.14 '
"{:,.3f}".format(9876543210.123456789) #将数字格式化为用逗号分隔千位,并限制小数位数为三位。
'9,876,543,210.123'
{:^8} 字段宽度为8的空间内居中对齐,转为整数
import math
print('The value of PI is approximately {}.'.format(math.pi))
print('The value of PI is approximately {!r}.'.format(math.pi))# 相当于 repr('哈哈')
print('The value of PI is approximately {!a}.'.format(math.pi))# 相当于 ascii('哈哈')
print('The value of PI is approximately {!s}.'.format(math.pi)) # 相当于 str('哈哈')
print('The value of PI is approximately {0:.3f}.'.format(math.pi))
(1)使用'{}'顺序占位符,
print('I\'m {},{}'.format('Hongten','Welcome to my space!'))
print('#' * 40)
(2)使用'{0}','{1}' 下标形式的占位符,位置符号
print('{0},I\'m {1},my E-mail is {2}'.format('Hello','Hongten','hongtenzone@foxmail.com'))
#可以改变占位符的位置
print('{1},I\'m {0},my E-mail is {2}'.format('Hongten','Hello','hongtenzone@foxmail.com'))
print('#' * 40)
#使用多次相同下标的参数
print 'port={1},{1}'.format('11','22') + '\n'
(3)使用关键字参数形式的占位符,使用名称符号
print('Hi,{name},{message}'.format(name = 'Tom',message = 'How old are you?'))
print('#' * 40)
d=dict(good='a',bad='b')
print 'port={good}, haha is {bad}'.format(**d) + '\n'
class Customer(object): def __init__(self,name): self.name=name def __str__(self): return 'name : {self.name}'.format(self=self) if __name__=='__main__': print str(Customer('aa'))
#混合使用'{0}','{name}'形式
print('{0},I\'m {1},{message}'.format('Hello','Hongten',message = 'This is a test message!'))
print('#' * 40)
(4)将True和False转为整数,将布尔类型转为整形,下面表达式输出0
cc = False print('{:^8}'.format(cc))
格式化元组
point = (1,2) print '{0[0]};{0[1]}'.format(point)
注意:字符串里面不能花括号 包含 花括号,也就是花括号不能嵌套,否则会报错,KeyError
python字符串中的KeyError '${ ss {} }'.formate('nihao') 报错 {}'''.format(HOST,PORT,USER,PASSWORD,timestampfile,timestampdoc,os.path.join(BACKDIR, now)) KeyError: ' $and'
f-strings
f-strings,亦称为格式化字符串常量(formatted string literals),是 Python3.6 新引入的一种字符串格式化方法。
f-strings在形式上是以 f 或 F 修饰符引领的字符串(f'xxx' 或 F'xxx'),以大括号 {} 标明被替换的字段;
f-strings在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。
https://www.cnblogs.com/jszfy/p/11148928.html
使用
1、f-strings解析变量,f-string可以解析任意类型的变量,跟str.format()类似,但是使用起来更便捷
name = "江辰" age = 18 print(f"姓名:{name},年龄:{age}") 运行结果: 姓名:江辰,年龄:18
2、f-strings是在运行时进行渲染的,因此可以将任何有效的Python表达式放入其中,这里的python表达式自然也包括函数
a = "f-" b = "string" print(f"{80*10},{{80*10}},{a + b}") 运行结果: 800,{80*10},f-string def mult_two_num(a): print("计算两数之和") print(10+a) f"{mult_two_num(9)}" 运行结果: 计算两数之和 19
3、转义
{}外可以使用\转义, {}内不允许出现\;
如需要显示花括号本身, 双花括号{{和}}将被替换为单花括号
确需在{}内转义, 应将转义内容以变量表示再填入.
print(f"{'\''}") # SyntaxError: f-string expression part cannot include a backslash print(f'{{a}}') # {a} b = '\\' print(f"{b}") # \
4、自定义格式
{content:format}设置字符串格式, content 是替换并填入字符串的内容, format 是格式描述符. 默认格式时不必指定{:format}.
大部分跟format函数一样
对齐
格式描述符 作用
> 左对齐(字符串默认对齐方式)
< 右对齐(数值默认对齐方式)
^ 居中
上述符号, 左边可指定填充字符, 右边可指定对齐长度, 例: p = "50%" print(f"{p:-^11}") # ----50%----
数值显示
PS: 仅使用于数值类型
格式描述符 作用
+ 正数前加正号,负数前加负号
- 正数前不加符号,负数前加负号
(空格) 正数前加空格,负数前加负号
# 各进制数前会分别显示0b、0o、0x或0X前缀, 需配合type类型使用
格式类型
格式描述符 作用 适用变量类型
s 普通字符串 字符串
b 二进制整数 整数
o 八进制整数 整数
d 十进制整数 整数
x或X 十六进制整数 整数
c 将十进制整数自动转换成对应的 Unicode 字符 整数
e或E 科学计数法格式 浮点数、复数、整数(自动转为浮点数)
f或F 浮点数表示(默认小数点后6位) 浮点数、复数、整数(自动转为浮点数)!!!!!!!!!!
g或G 自动选用e或f(E或F) 浮点数、复数、整数(自动转为浮点数)
% 百分数(默认小数点后6位) 浮点数、整数(自动转为浮点数)
a = 10 print(f"{a:#b}") print(f"{a:#o}") print(f"{a:+#d}") print(f"{a:#x}") print(f"{a:#X}") # 0b1010 # 0o12 # +10 # 0xa # 0XA
宽度与精度
格式描述符 作用
width 整数width指定宽度
0width 整数width指定宽度,0表示高位用0补足宽度
width.precision 整数 width 指定宽度,precision 指定精度
a = 12345 print(f"{a:6}") print(f"{a:06}") # 12345 # 012345 b = 3.1415 print(f"{b:.3f}") print(f"{b:6.3f}") !!!!!!!! print(f"{b:06.3F}") !!!!!!!! # 3.142 # 3.142 # 03.142
f
python字符串中的转义
python里面有两种转义符
1、字符串格式化里面的转义符,对于用format函数格式化无用
2、正则表达式里面的转义符
1、%,两个特殊符号前面加%转义(字符串格式化里面的转义符),对于用format函数格式化无用,不需要记,垃圾
"str:%d%%" %i :百分之多少 %d % 比如100%
sys.stdout.write("str:%d%%" %i)
abc='growth rate: %d %%' %7
print(abc)
f
原样输出%,对于用format函数格式化无用,不需要记,垃圾
%转义,原样输出%
sql = "grant replication slave on *.* to %s@'%%' identified by '%s'" %'xiaolin'
2、\ 转义符 (正则表达式里面的转义符)
转义符和元字符跟shell的跟mysql的基本一样,转义都有\ 反斜杠
http://www.cnblogs.com/MYSQLZOUQI/p/5189884.html
我们想让通配符,或者元字符变成普通字符。那么这里我们就需要用到转义符了。 shell提供转义符有四种。
'' 单引号,硬转义,其内部所有的shell元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。
"" 双引号,软转义,其内部只允许出现特定的shell元字符($,`,\):$用于变量值替换、`用于命令替换、\用于转义单个字符
\ 反斜杠,转义,去除其后紧跟的元字符或通配符的特殊意义
如果字符串里需要用到单引号,那么字符串外面就需要双引号,如果外面也用单引号就会报错
"change master to master_host='%s',master_port" %(abc)
字符串的值本身包含单引号的情况,我们使用双引号来定义字符串
字符串的值本身包含双引号的情况,我们使用单引号来定义字符串
intro = "He's a teacher" statement = 'John said to me: "Can you do me a favour "'
字符串的值本身既包含双引号又包含单引号,那么我们使用转义字符\来处理
intro = 'He\'s a teacher' statement = "John said to me: \"Can you do me a favour \""
加上原始字符
intro = r"He's a \ teacher"
使用三个引号来定义字符串
""" type " license " for more information. Details about 'ob ', use ' object? for extra details . """
使用三个引号定义的字符串一般称为多行字符串
多行字符串起止都是三个单引号或三个双引号,在三重引号之间,所有的引号,都会被认为是普通的字符, 是字符串的一部分
要分清楚python元字符、python特殊字符(部分ASCII控制字符)、python普通字符、python普通字符里单引号、python运算符
运算符:例如运算符,如 + 、 - 、 * 、 ** 、 / 、 % 、 < 、 >
python普通字符,无任何特殊意义,在正则模块re里或普通字符串里都无特殊意思
python元字符,只有在正则模块re里有用,如果不是在正则模块re里则原样输出,而且在re模块里要加r或R来原样输出raw strings:.、^、$、*、+、?、{}、[]、\ 转义、|、()、\d、\D、\s、\S、\w、\W
python特殊字符(部分ASCII控制字符),要转义,下面是特殊字符,需要使用r或R来原样输出raw strings原生字符,或text.encode(encoding='xxx')一般在mssql备份Windows路径的sql里无法在字符串前加r或R只能用这种方式或在特殊字符前加\ 转义符,例如ho\\rn.orgp222r
def to_rawstrings(text): ''' # convert a text string to raw strings :param text: :return: ''' import six s = '' if six.PY2: if isinstance(text, str): s = text.encode(encoding='string-escape') elif isinstance(text, unicode): s = text.encode(encoding='unicode-escape') elif six.PY3: if isinstance(text, str): s = text.encode(encoding='unicode-escape') return s
python特殊字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000 空
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数yy代表的字符,例如:\o12代表换行
\xyy 十进制数yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出
注意:
在python普通字符里保留单引号,方法是单引号前加\ 转义符或使用r或R来原样输出raw strings,或三个引号 包住字符串
在字符串里包含\\ 反斜杠符号和\ 转义的典型例子是Windows的路径,所以Windows的路径要用终极方法:raw strings+三个引号
要转义,终极方法是:raw strings(r或R)+三个引号
https://www.journaldev.com/23598/python-raw-string
Raw String 和引号
raw string字符串里,最后一个引号(单引号/双引号/三引号)前面不能有反斜杠,否则会被认为是转义,然后出错
if os.path.isdir(r'E:\安装文件\pycharm\'): 会报错
目录:r'E:\安装文件\pycharm'
文件:r'E:\安装文件\pycharm\abc.txt'
#encoding:utf8:指定字符编码支持中文
有几种写法
#encoding:utf8
#encoding:utf-8
#-*- encoding:utf-8 -*-
#coding:utf8
#coding:utf-8
#-*- coding:utf-8 -*-
帮助
dir()函数:看一下对象的属性,有哪些函数
help()函数
type()函数
ctrl+鼠标左键看源码,比如os.path,点进去会到__builtin__.py,不需要help函数这麽麻烦
type函数
查看变量的数据类型
type(变量名)
help函数
查看帮助
help(名称)
pprint
print()和pprint()都是python的打印模块,功能基本一样,唯一的区别就是pprint()模块打印出来的数据结构更加完整,每行为一个数据结构,更加方便阅读打印输出结果。
特别是对于特别长的数据打印,print()输出结果都在一行,不方便查看,而pprint()采用分行打印输出,所以对于数据结构比较复杂、数据长度较长的数据,适合采用pprint()打印方式
import pprint data = ('test', [1, 2, 3, 'test', 4, 5], 'This is a string!','This ishhhhhhhhh!', {'age': 23, 'gender': 'F'},[1,2,3]) print(data) print('*' * 30) pprint.pprint(data) pprint.pprint([1,2,3])
python的关键字,python3.7
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
宽度与精度格式描述符 作用width 整数width指定宽度0width 整数width指定宽度,0表示高位用0补足宽度width.precision 整数 width 指定宽度,precision 指定精度