当前位置: 移动技术网 > IT编程>脚本编程>Python > 一、Python基础

一、Python基础

2019年06月22日  | 移动技术网IT编程  | 我要评论

服务器正忙,拢香轩辕花祭,中国建筑材料集团有限公司

博客内容:

1、基础语法

2、运算符

3、流程控制

4、列表、元组、字典、集合

5、字符串

6、文件操作

 

 

一、基础语法

1、标识符

命名规则:

  • 以字母、下划线开头
  • 其他部分由字母、数字或下划线组成
  • 不能使用关键字命名;
  • 常量一般全部是大写;
  • 命名要有意义,不宜过长。

定义:可以改变的量:

age=19    #定义一个名为age的量,他的值为19

常量:不可以改变的量(命名字母全大写)

2、注释

python中单行注释以 # 开头

行注释可以用多个 # 号,还有 ''' 和 """

# 单行注释
 
'''
多行注释
'''
 
"""
多行注释
"""

3、行与缩进

python缩进来表示代码块,不使用大括号 {} 。

缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

4、数字(number)类型

python中数字有四种类型:整数、布尔型、浮点数和复数。

  • int (整数), 如 1
  • bool (布尔), 如 true
  • float (浮点数), 如 1.23、3e-2
  • complex (复数), 如 1 + 2j、 1.1 + 2.2j
age = 19

ps:类型的转换

 

  • int(x) 将x转换为一个整数。
  • float(x) 将x转换到一个浮点数。
  • complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
  • complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。

5、字符串(string)

"oeasys"

  • python中单引号和双引号使用完全相同。
  • 使用三引号('''或""")可以指定一个多行字符串
  • 转义符 '\' 反斜杠可以用来转义
  • python中的字符串不能改变
  • 字符串可以用 + 运算符连接在一起,用 * 运算符重复以及格式化输出

ps:格式化输出

字符串 %s;整数 %d、;浮点数%f

name = "oeasys"
print ("i am %s " ,% name)
  
#输出: i am oeasys

6、布尔值

一个true(真)
一个false(假)

7、用户输入与输出

input() 等待用户输入

print() 打印输出

二、运算符

1、python算术运算符

2、python比较运算符

 

3、python赋值运算符

4、python位运算符

 

5、python逻辑运算符

6、python成员运算符

  

7、python身份运算符

 

8、python运算符优先级

 

 

 三、流程控制

1、条件控制

1 if 如果:    # 如果为真,执行如果代码
2     执行如果代码
3 elif 否则如果:    # 否则如果为真,执行否则如果代码
4     执行否则如果代码
5 else:    # 前面都不为真,执行否则代码
6     执行否则代码
 
1 result = 值1 if 条件 else 值2
2  
3 # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量

 2、循环控制

1、while 循环

while 判断条件:
    语句

 2、while 循环使用 else 语句

while 如果为真:    # 如果为真,执行循环语句
   执行循环语句
else:    #while循环为假,执行否则语句
   执行否则语句

 3、for 语句

for i in range(10):

  执行语句 

 ps:range()函数

内置range()函数,它会生成数列

1 for i in range(5):
2      print(i)
3 ...
4 0
5 1
6 2
7 3
8 4

 使用range指定区间的值

1 for i in range(5,9) :
2     print(i)
3  
4     
5 5
6 6
7 7
8 8

 range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长')

1 for i in range(0, 10, 3) :
2     print(i)
3  
4     
5 0
6 3
7 6
8 9

 您可以结合range()和len()函数以遍历一个序列的索引

1 a = ['google', 'baidu', 'runoob', 'taobao', 'qq']
2 for i in range(len(a)):
3 ...     print(i, a[i])
4 ... 
5 0 google
6 1 baidu
7 2 runoob
8 3 taobao
9 4 qq

 range()函数来创建一个列表

1 >>>list(range(5))
2 [0, 1, 2, 3, 4]

 

 

4、break和continue语句

  1. break 语句可以跳出 for 和 while 的循环体
  2. continue语句被用来告诉python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

 5、pass 语句

python pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句

 四、列表、元组、字典、集合

1、列表

创建列表

names = ['张三',"李四",'王五']

通过下标访问列表中的元素,下标从0开始计数

>>> names[0]
'张三'
>>> names[2]
'王五'
>>> names[-1]
'王五'
>>> names[-2] #还可以倒着取
'李四' 
 1 >>> num = ["1","2","3","4","5","6"]
 2 >>> num[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
 3 ['2', '3', '4']
 4 >>> num[1:-1] #取下标1至-1的值,不包括-1
 5 ['2', '3', '4', '5']
 6 >>> num[0:3] 
 7 ['1', '2', '3']
 8 >>> num[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
 9 ['1', '2', '3']
10 >>> num[3:] #如果想取最后一个,必须不能写-1,只能这么写
11 ['4', '5', '6'] 
12 >>> num[3:-1] #这样-1就不会被包含了
13 ['4', '5']
14 >>> num[0::2] #后面的2是代表,每隔一个元素,就取一个
15 ['1', '3', '5'] 
16 >>> num[::2] #和上句效果一样
17 ['1', '3', '5']
1 num = ['1', '2', '3', '4', '5', '6']
2 >>> num.append("7")
3 >>> num
4 ['1', '2', '3', '4', '5', '6', '7']
1 >>> num = ['1', '2', '3', '4', '5', '6', '7']
2 >>> num.insert(2,"强行从3前面插入")
3 >>> num
4 ['1', '2', '强行从3前面插入', '3', '4', '5', '6', '7']
1 >>> num = ['1', '2', '3', '4', '5']
2 >>> num[2] = "new"
3 >>> num
4 ['1', '2', 'new', '3', '4', '5']
 1 >>> mun = ['1', '2', '3', '4', '5', '6', '7']
 2 >>>del num[2] 
 3 >>> num
 4 num = ['1', '2', '3', '4', '5', '6', '7']
 5 
 6 
 7 
 8 >>> num.remove("4") #删除指定元素
 9 >>> num
10 ['1', '2', '5', '6', '7']
11 >>> num.pop() #删除列表最后一个值 
12 '7'
13 >>> nun
14 ['1', '2', '5', '6']
1 >>> num = ['1', '2', '3', '4', '5']
2 >>> num1 = [1,2,3]
3 >>> num.extend(num1)
4 >>> num
5 ['1', '2', '3', '4', '5', 1, 2, 3]
1 >>> num = ['1', '2', '3', '4', '5', 1, 2, 3]
2 
3 >>> num_copy = num.copy()
4 >>> num_copy
5 ['1', '2', '3', '4', '5', 1, 2, 3]
1 >>> num = ['1', '2', '3', '4', '5','2']
2 >>> num.count("2")
3 2
1 >>> num = ['4', '2', '1','9', '7', '5']
2 >>> num.sort() 
3 >>> num
4 ['1', '2', '4', '5', '7', '9']
1 >>> num = ['4', '2', '1','9', '7', '5']
2 >>> num.reverse()
3 >>> num
4 ['5', '7', '9', '1', '2', '4']
1 >>> num = ['4', '2', '1','9', '7', '5']
2 >>> num.index('9')
3 3
 

2、元组

python 的元组与列表类似,元组的元素不能修改,又叫只读列表。

num = ("1","2","3")

只有2个方法:一个是count,一个是index 

3、字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 

字典是无序的,key是唯一的

1 names = {
2     'name1': "zhangsan",
3     'name2': "李四",
4     'name3': "王五",
5 }
1 names = {
2     'name1': "zhangsan",
3     'name2': "李四",
4     'name3': "王五",
5 }
6 names["name4"] = "wangwu"
1 name['name2'] = "张三"
info.pop("name2")  #删除方法1

del info['name3']  #删除方法2

info.popitem() #随机删除
1 >>> "name1" in names #查找1
2 true
3 >>> names.get("name2")  #获取
4 
5 >>> names["name9"] #获取,但是如果key不存在,就报错
 1 values() 函数以列表返回字典中的所有值
 2 
 3 keys() 函数以列表返回一个字典所有的键
 4 
 5 setdefault(key,default) 函数, 如果键不存在于字典中,将会添加键并将值设为默认值
 6 key -- 查找的键值。
 7 default -- 键不存在时,设置的默认键值。
 8 
 9 update() 函数把字典dict2的键/值对更新到dict里。
10 
11 items() 函数以列表返回可遍历的(键, 值) 元组数组
12 
13 has_key() 函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。
14 
15 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
16 
17 copy() 函数返回一个字典的浅复制。
序号函数及描述
1
比较两个字典元素。
2
计算字典元素个数,即键的总数。
3
输出字典可打印的字符串表示。
4
返回输入的变量类型,如果变量是字典就返回字典类型。

 

序号函数及描述
1
删除字典内所有元素
2
返回一个字典的浅复制
3
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4 dict.get(key, default=none)
返回指定键的值,如果值不在字典中返回default值
5
如果键在字典dict里返回true,否则返回false
6
以列表返回可遍历的(键, 值) 元组数组
7
以列表返回一个字典所有的键
8 dict.setdefault(key, default=none)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9
把字典dict2的键/值对更新到dict里
10
以列表返回字典中的所有值
11
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12
随机返回并删除字典中的一对键和值。

4、集合 

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系
 1 s = set([3,5,9,10])      #创建一个数值集合  
 2   
 3 t = set("hello")         #创建一个唯一字符的集合  
 4 
 5 
 6 a = t | s          # t 和 s的并集  
 7   
 8 b = t & s          # t 和 s的交集  
 9   
10 c = t – s          # 求差集(项在t中,但不在s中)  
11   
12 d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
13   
14    
15   
16 基本操作:  
17   
18 t.add('x')            # 添加一项  
19   
20 s.update([10,37,42])  # 在s中添加多项  
21   
22    
23   
24 使用remove()可以删除一项:  
25   
26 t.remove('h')  
27   
28   
29 len(s)  
30 set 的长度  
31   
32 x in s  
33 测试 x 是否是 s 的成员  
34   
35 x not in s  
36 测试 x 是否不是 s 的成员  
37   
38 s.issubset(t)  
39 s <= t  
40 测试是否 s 中的每一个元素都在 t 中  
41   
42 s.issuperset(t)  
43 s >= t  
44 测试是否 t 中的每一个元素都在 s 中  
45   
46 s.union(t)  
47 s | t  
48 返回一个新的 set 包含 s 和 t 中的每一个元素  
49   
50 s.intersection(t)  
51 s & t  
52 返回一个新的 set 包含 s 和 t 中的公共元素  
53   
54 s.difference(t)  
55 s - t  
56 返回一个新的 set 包含 s 中有但是 t 中没有的元素  
57   
58 s.symmetric_difference(t)  
59 s ^ t  
60 返回一个新的 set 包含 s 和 t 中不重复的元素  
61   
62 s.copy()  
63 返回 set “s”的一个浅复制

 

五、字符串

1、python转义字符

转义字符描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy代表的字符,例如:\o12代表换行
\xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

2、python字符串运算符

操作符描述实例
+ 字符串连接
>>>a + b 'hellopython'
* 重复输出字符串
>>>a * 2 'hellohello'
[] 通过索引获取字符串中字符
>>>a[1] 'e'
[ : ] 截取字符串中的一部分
>>>a[1:4] 'ell'
in 成员运算符 - 如果字符串中包含给定的字符返回 true
>>>"h" in a true
not in 成员运算符 - 如果字符串中不包含给定的字符返回 true
>>>"m" not in a true
r/r 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
>>>print r'\n' \n >>> print r'\n' \n
% 格式字符串

3、python 字符串格式化

python 字符串格式化符号:

    符   号描述
      %c  格式化字符及其ascii码
      %s  格式化字符串
      %d  格式化整数
      %u  格式化无符号整型
      %o  格式化无符号八进制数
      %x  格式化无符号十六进制数
      %x  格式化无符号十六进制数(大写)
      %f  格式化浮点数字,可指定小数点后的精度
      %e  用科学计数法格式化浮点数
      %e  作用同%e,用科学计数法格式化浮点数
      %g  %f和%e的简写
      %g  %f 和 %e 的简写
      %p  用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号功能
* 定义宽度或者小数点精度
- 用做左对齐
+ 在正数前面显示加号( + )
<sp> 在正数前面显示空格
# 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0x'(取决于用的是'x'还是'x')
0 显示的数字前面填充'0'而不是默认的空格
% '%%'输出一个单一的'%'
(var) 映射变量(字典参数)
m.n. m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

4、python的字符串内建函数

方法描述

把字符串的第一个字符大写

返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

string.decode(encoding='utf-8', errors='strict')

以 encoding 指定的编码格式解码 string,如果出错默认报一个 valueerror 的 异 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace'

string.encode(encoding='utf-8', errors='strict')

以 encoding 指定的编码格式编码 string,如果出错默认报一个valueerror 的异常,除非 errors 指定的是'ignore'或者'replace'

检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 true,否则返回 false.

把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。

检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

格式化字符串

跟find()方法一样,只不过如果str不在 string中会报一个异常.

如果 string 至少有一个字符并且所有字符都是字母或数字则返

回 true,否则返回 false

如果 string 至少有一个字符并且所有字符都是字母则返回 true,

否则返回 false

如果 string 只包含十进制数字则返回 true 否则返回 false.

如果 string 只包含数字则返回 true 否则返回 false.

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 true,否则返回 false

如果 string 中只包含数字字符,则返回 true,否则返回 false

如果 string 中只包含空格,则返回 true,否则返回 false.

如果 string 是标题化的(见 title())则返回 true,否则返回 false

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 true,否则返回 false

以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

转换 string 中所有大写字符为小写.

截掉 string 左边的空格

maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

返回字符串 str 中最大的字母。

返回字符串 str 中最小的字母。

有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.

把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.

类似于 find()函数,不过是从右边开始查找.

类似于 index(),不过是从右边开始.

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

类似于 partition()函数,不过是从右边开始查找

删除 string 字符串末尾的空格.

以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串

按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 false,不包含换行符,如果为 true,则保留换行符。

检查字符串是否是以 obj 开头,是则返回 true,否则返回 false。如果beg 和 end 指定值,则在指定范围内检查.

在 string 上执行 lstrip()和 rstrip()

翻转 string 中的大小写

返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

根据 str 给出的表(包含 256 个字符)转换 string 的字符,

要过滤掉的字符放到 del 参数中

转换 string 中的小写字母为大写

返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

六、文件操作

 1、初识⽂件操作

使⽤open()函数来打开⼀个⽂件:open(文件名(路径),mode=“打开文件的方式”,encoding=“字符集utf-8”)

打开⽂件的⽅式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤的是r(只读)模式

 rb, wb, ab, 用来读取非⽂本⽂件的时候. 比如读取mp3. 图像. 视频等信息的时候就需要⽤到。因为这种数据是没办法直接显⽰出来的. ⽂件上传下载的时候还会⽤到. 以及直播. 实际上都是这种数据.

2、绝对路径和相对路径

1. 绝对路径:从磁盘根⽬录开始⼀直到⽂件名.

2. 相对路径:同⼀个⽂件夹下的⽂件. 相对于当前这个程序所在的⽂件夹⽽⾔. 如果在同 ⼀个⽂件夹中. 则相对路径就是这个⽂件名. 如果在上⼀层⽂件夹. 则要../

3、只读(r, rb)

1 f = open("文件路径.txt",mode="r", encoding="utf-8") # 打开文件
2 content = f.read() # 读取内容,文件大时不要用
3 print(content) # 打印读取的内容
4 f.close() # 关闭文件
5 
6 需要注意encoding表⽰编码集. 根据⽂件的实际保存编码进⾏获取数据, 对于我们⽽⾔. 更多的是utf-8.

 

1 f = open("文件名.txt",mode="rb" )
2 content = f.read()
3 print(content)
4 f.close()
5 
6 rb的作⽤: 在读取非⽂本⽂件的时候. 比如读取mp3. 图像. 视频等信息的时候就需要⽤到
7 rb. 因为这种数据是没办法直接显⽰出来的. 在后⾯我们⽂件上传下载的时候还会⽤到. 还有.我们看的直播. 实际上都是这种数据.

 

 

4、只写(w, wb)

1 f = open("文件", mode="w", encoding="utf-8")
2 f.write("oeasys.cn")
3 f.flush() # 刷新
4 f.close()

 

1 f = open("文件", mode="wb")
2 f.write("oeasys.cn".encode("utf-8"))
3 f.flush()
4 f.close()

 

5、追加(a, ab)

1 f = open("文件", mode="a", encoding="utf-8")
2 f.write("oeasys.cn")
3 f.flush()
4 f.close()

 

 

6、r+读写

1 f = open("文件", mode="r+", encoding="utf-8")
2 content = f.read()
3 f.write("oeasys.cn")
4 print(content)
5 f.flush()
6 f.close()
7 结果:
8 正常的读取之后, 写在结尾

 

7、w+写读

1 f = open("文件", mode="w+", encoding="utf-8")
2 f.write("oeasys.cn")
3 content = f.read()
4 print(content)
5 f.flush()
6 f.close()

 

 

8、a+写读(追加写读)

1 f = open("文件", mode="a+", encoding="utf-8")
2 f.write("oeasys.cn")
3 content = f.read()
4 print(content)
5 f.flush()
6 f.close()

 

 

9、读取⽂件的⽅法:

1 f = open("文件路径", mode="r", encoding="utf-8")
2 content = f.read()
3 print(content)

 

 

1 f = open("文件路径", mode="r", encoding="utf-8")
2 content = f.readline()
3 content2 = f.readline()
4 content3 = f.readline()
5 content4 = f.readline()
6 content5 = f.readline()

 

1 f = open("文件", mode="r", encoding="utf-8")
2 for line in f:
3  print(line.strip())

 

注意: 读取完的⽂件句柄⼀定要关闭 f.close()

10、其他操作⽅法

1. seek(n) 光标移动到n位置, 注意, 移动的单位是byte. 所以如果是utf-8的中⽂部分要 是3的倍数.

  通常我们使⽤seek都是移动到开头或者结尾.

  seek(偏移量,位置)

 

  移动到开头: seek(0)

  移动到结尾: seek(0,2)

  seek的第⼆个参数表⽰的是从哪个位置进⾏偏移, 默认是0, 表 ⽰开头, 1表⽰当前位置, 2表⽰结尾

 

2. tell()获取到当前光标位置

print(f.tell()) 

3. truncate() 截断⽂件

  从开头截断到光标位置,删掉光标后⾯的所有内容

  如果给参数,从开头截断到参数位置

在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显⽰的是多少. 再写入 或者操作⽂件的时候都是在结尾进⾏的操作. 

所以如果想做截断操作. 记住了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进⾏截断

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网