Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助  pprint 关键字

目录

Pycharm使用技巧(转载)

Python第一天  安装  shell  文件

Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化

Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典

Python第四天   流程控制   if else条件判断   for循环 while循环

Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数

Python第六天   类型转换

Python第七天   函数  函数参数   函数变量   函数返回值  多类型传值    冗余参数   函数递归调用   匿名函数   内置函数   列表表达式/列表重写

Python第八天  模块   包   全局变量和内置变量__name__    Python path

Python第九天  面向对象  类定义   类的属性    类的方法    内部类   垃圾回收机制   类的继承 装饰器

Python第十天   print >> f,和fd.write()的区别    stdout的buffer  标准输入 标准输出  标准错误   重定向 输出流和输入流

Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函数   生成器  walk模块   hashlib模块

Python第十二天     收集主机信息     正则表达式  无名分组   有名分组

Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块  httplib模块  django和web服务器整合  wsgi模块   gunicorn模块

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-string)

在Python中存在两种格式化字符串的方法,即%-formatting语句和str.format()函数。%表达式从Python 诞生之日就开始存在了,是基于C语言的printf 模型,目前还广泛使用。
format函数是Python 2.6 和Python 3.0 新增加的技术,是Python独有的方法,并且和%-formatting语句的功能有不少的重叠。虽然%表达式目前还广泛使用
但是, format 函数才是字符串格式化的未来,%表达式在Python 未来的版本中可能会被弃

%表达式,%-formatting语句
%表示格式化字符串的格式符号。
%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 =''
sys.stdout.write("str:%s" %i) 字典
import sys
i =''
print "str:%(key)s" % {'key':i} import sys
i =10
sys.stdout.write("str:%02f" %i)

format()函数
使用str.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))

Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助

#属性赋值,比较少用

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'))

#使用'{}'占位符
print('I\'m {},{}'.format('Hongten','Welcome to my space!'))
print('#' * 40)

#也可以使用'{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)

#使用'{name}'形式的占位符,使用名称符号
print('Hi,{name},{message}'.format(name = 'Tom',message = 'How old are you?'))
print('#' * 40)

#混合使用'{0}','{name}'形式
print('{0},I\'m {1},{message}'.format('Hello','Hongten',message = 'This is a test message!'))
print('#' * 40)

格式化元组

 point = (1,2)
print '{0[0]};{0[1]}'.format(point)

Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助

#下面进行格式控制
import math
print('The value of PI is approximately {}.'.format(math.pi))
print('The value of PI is approximately {!r}.'.format(math.pi))
print('The value of PI is approximately {0:.3f}.'.format(math.pi))

注意:字符串里面不能花括号 包含  花括号,也就是花括号不能嵌套,否则会报错,KeyError

python字符串中的KeyError
'${ ss {} }'.formate('nihao') 报错
{}'''.format(HOST,PORT,USER,PASSWORD,timestampfile,timestampdoc,os.path.join(BACKDIR, now))
KeyError: ' $and'

Python 会自动将format 函数的参数依次传递给{}占位符
print 'port={}'.format('11') + '\n'

通过下标访问参数以后, 一个参数可以出现多次
print 'port={1},{1}'.format('11','22') + '\n'

在参数较少的情况下,通过占位符或下标的形式访问format 函数的参数并没有什么问
题。如果参数较多就不太适合了,这个时候,可以使用解释性更强的关键字参数形式
d=dict(good='a',bad='b')
print 'port={good}, haha is {bad}'.format(**d) + '\n'

format函数精度,符号,宽度,对齐方式,字符填充,逗号分隔进行测试
"{:.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  '
"{:,}".format(1234567)
'1,234,567'

注意:%s方式格式化会有元组的问题,需要用.format方式才能解决

https://segmentfault.com/q/1010000000334606

a='port=%s' + '\n' %(mongoport,)
TypeError: not all arguments converted during string formatting

print ('port=%d' + '\n') % (mongoport)
TypeError: %d format: a number is required, not str

f-string

f-string,亦称为格式化字符串常量(formatted string literals),是 Python3.6 新引入的一种字符串格式化方法。
f-string在形式上是以 f 或 F 修饰符引领的字符串(f'xxx' 或 F'xxx'),以大括号 {} 标明被替换的字段;
f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。
https://www.cnblogs.com/jszfy/p/11148928.html

使用

1、f-string解析变量,f-string可以解析任意类型的变量,跟str.format()类似,但是使用起来更便捷

name = "江辰"
age = 18
print(f"姓名:{name},年龄:{age}")
运行结果:
姓名:江辰,年龄:18

2、f-string是在运行时进行渲染的,因此可以将任何有效的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

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']

上一篇:为什么 Java 8 中不再需要 StringBuilder 拼接字符串


下一篇:python3字符串格式化format()函数的简单用法