1. 基础语法
1.注意编码
在不同的操作系统中、不同的开发工具中,有不同的默认编码类型,常见的有:GBK、GB2313、UTF-8、UNICODE、ISO-8859-1
2.标识符规范
- 第一个字符可以是:字母、’_’、中文
- 非第一位字符可以是:字母、数字、’_’、中文
- 大小写敏感
_姓名 = '张三'
name01 = 'zhangsan'
print(_姓名)
print(name01)
3.保留关键字
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', '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']
4.注释
单行注释以 # 开头,多行注释采用三对单引号(’’’)或者三对双引号(""")将注释括起来
# 这是一行注释
'''
这是多行注释
这是多行注释
这是多行注释
'''
5.缩进
通过缩进表示代码块等级,常用Tab
name = 'zhangsan'
# 打印字符
def print_char(name):
for char in name:
print(char)
print_char(name)
6.基本数据类型
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
7.输入输出
name = input("请输入姓名:")
print('用户输入:', name)
# 保存内容到文件
open('a.log',mode='w').write('asd')
8.导包
import os
from os import path
# from xxx import *
import time
# 创建目录
if not path.exists('testDir'):
os.mkdir('testDir')
# 格式化时间
format_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
print(format_time)
2.解释器
像java安装后设置好环境变量就可以使用java xx.class一样,安装好python和环境变量后,可以采用python xx.py进行运行,区别不一样的是无需编译,是解释型语言,可直接运行。
hello.py
print ("Hello, Python!");
执行
python hello.py
3. 运算符
python中没有三元表达式,可以通过 if(a>0) a else 0实现
3.1 算术运算法
和大多数类型的编程语言一样,python中的也有±*/,但也有不一样的
- / 当两个数字类型相除时,如果参数余数,相除会产生小数
- // 向下整除
- 字符串不可以和number类型相加,需要先转换为字符串
- 在字符串中,使用较为灵活
假设变量 a 为 10,变量 b 为 21:
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 - 两个对象相加 | a + b 输出结果 31 |
- | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -11 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
/ | 除 - x 除以 y | b / a 输出结果 2.1 |
% | 取模 - 返回除法的余数 | b % a 输出结果 1 |
** | 幂 - 返回 x 的 y 次幂 | a ** b 为 10 的 21 次方 |
// | 取整除 - 返回商的整数部分 | 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
3.2 比较运算符
和大多数类型的编程语言一样,==、!=、>、<、>=、<=
假设变量 a 为 10,变量 b 为 20:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 – 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 – 比较两个对象是否不相等 | (a != b) 返回 True. |
> | 大于 – 返回 x 是否大于 y | (a > b) 返回 False。 |
< | 小于 – 返回 x 是否小于 y。所有比较运算符返回 1 表示真,返回 0 表示假。这分别与特殊的变量 True 和 False 等价。注意,这些变量名的大写。 | (a < b) 返回 True。 |
>= | 大于等于 – 返回 x 是否大于等于 y。 | (a >= b) 返回 False。 |
<= | 小于等于 – 返回 x 是否小于等于 y。 | (a <= b) 返回 True。 |
3.3 赋值运算符
假设变量 a 为 10,变量 b 为 20:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
3.4 位运算符
按位运算符是把数字看作二进制来进行计算的。Python 中的按位运算法则如下:
假设变量 a 为 60,b 为 13。
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为 1,则该位的结果为 1,否则为 0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
按位或运算符:只要对应的二个二进位有一个为 1 时,结果位就为 1。 | ||
^ | 按位异或运算符:当两对应的二进位相异时,结果为 1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把 1 变为 0,把 0 变为 1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补 0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
3.5 逻辑运算符
假设变量 a 为 10, b 为 20:
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 |
or | x or y | 布尔"或" - 如果 x 是 True,它返回 x的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
3.6 成员运算符
用户判断成员是否包含还是未包含在括字符串、列表或元组。
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
3.7 身份运算符
身份运算符用于比较两个对象的存储单元
运算符 | 描述 | 实例 |
---|---|---|
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 如果 id(x) 等于 id(y) , is 返回结果 True |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 True |
4. 数字
Python 数字类型用于数值的储存。数值类型是不允许改变的,如果改变数字数据类型的值,将重新分配内存空间。
- int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
- bool (布尔), 如 True。
- float (浮点数), 如 1.23、3E-2
- complex (复数), 如 1 + 2j、 1.1 + 2.2j
count = 100
result = True
change = 12.34
c = complex(2, 3)
数字类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
- int(x) 将x转换为一个整数。
- float(x) 将x转换到一个浮点数。
- complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
- complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
数学函数
函数 | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已废弃,使用 (x>y)-(x<y) 替换。 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,…) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,…) | 返回给定参数的最小值,参数可以为序列。 |
modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
pow(x, y) | x**y 运算后的值。 |
round(x [,n]) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。 |
其实准确的说是保留值将保留到离上一位更近的一端。 | |
sqrt(x) | 返回数字x的平方根。 |
5. 字符串
- 单引号和双引号使用完全相同。
- 使用三对引号(’’'或""")可以囊括一个多行字符串。
- 转义符 ‘’
- 自然字符串, 通过在字符串前加 r 或 R。 如 r"this is a line with \n" 则\n会显示,并不是换行。
- Python 允许处理 unicode 字符串,加前缀 u 或 U, 如 u"this is an unicode string"。
- 字符串是不可变的。
- 按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
- 字符串可以用 + 运算符连接在一起,用 * 运算符重复。
- Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
- Python中的字符串不能改变。
- Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
- 字符串的截取的语法格式如下:变量 [头下标: 尾下标: 步长]
str='123456789'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔两个的字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
字符串格式化
常用的有:%s、%d、%f
content = '姓名:%s,年龄:%d' % ('张三', 16)
print(content)
字符串内建函数
find、endwith、startwith、index、join、replace、split、lower、upper
6. 列表List
- 列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。
- 列表用 [ ] 标识,是 python 最通用的复合数据类型。
- 列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾,遵循左闭右开。
- 加号 + 是列表连接运算符,星号 * 是重复操作。
content = [1, 3, 5.0, 'zhangsan']
nums = [1, 3, 5, 7, 9]
nums2 = [2, 4, 6, 8, 10]
nums.remove(1)
print(nums[0])
print(nums[0:2])
print(nums[-1])
print(nums[-3:])
nums.append(11)
# nums = nums*3
nums += nums2
print(nums)
7. 元组
元组与列表类似,不同之处在于元组的元素不能修改,但可以相加组合
tup1 = (1, 3, 5, 7, 9)
tup2 = (2, 4, 6, 8, 10)
print(tup1[0])
print(tup1[1:3])
print(tup1[-3:])
tup1 += tup2
print(tup1)
内置函数
len、min、max、tuple
8. 字典
在python中的字典对应是java中的map集合,可以进行增删改查,格式化后就是我们常用的json数据格式
import json
headers = {
"Host": "www.baidu.com",
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
}
print(headers["Accept-Language"])
headers.update({"Accept-Language": "666"})
headers["Accept-Language"]="777"
print("Accept-Language" in headers)
headers.pop("Accept-Language")
print("Accept-Language" in headers)
print(json.dumps(headers))
print(type(headers))
9. 条件控制语句和循环
通过条件控制语句,进行代码有选择性的执行,常见if、while、
a = 6
b = 10
if a > b:
print('a>b')
else:
print('a<=b')
while a < b:
a += 1
else:
print('end')
10. 迭代器和生成器
迭代器:用于遍历数据
生成器:生成可迭代的数据,使用yield
nums = [1, 2, 3, 4]
it = iter(nums)
print(next(it))
for item in it:
print(item)
nums = [1, 2, 3, 4]
def get_nums():
for item in nums:
yield 'times' + str(item)
print('end')
for i in get_nums():
print(i)
11. 函数、方法、类
与类和实例无绑定关系的function都属于函数(function); 与类和实例有绑定关系的function都属于方法(method)
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
‘_’下划线开头变量表示内部成员,类似于java中的private
,不能直接使用
count = 0
class User:
"""
用户类
"""
name = ''
_age = 0
count = 1
def set_name(self, name):
self.name = name
def set_age(self, age):
self._age = age
def get_format_name(self):
count = 2
# 闭包
def print_something():
global count
count = 3
print('print_something')
print_something()
return '姓名:%s' % self.name
def get_age(self):
return self._age
user = User()
user.set_name('张三')
print(user.get_format_name())
print('姓名:%s' % user.name)
# 错误使用
# print('年龄:%s' % user._age)
print(count)
使用外部作用域需要使用 global 关键字
def 函数名(参数列表,*):
函数体
# return "xxx"
nums = [1, 2, 3, 4]
def print_nums(nums, debug=False):
if debug:
print('debug:', nums)
else:
print('release:', nums)
return debug
result = print_nums(nums, debug=True)
print(result)
12. 模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是 .py。模块可以被别的程序引入,以使用该模块中的函数等功能。常用的三方库也是模块。所谓的导包就是导入模块
import sys
import os
from xxx import xxx
13. File文件
file 文件对象使用 open 函数来创建,下表列出了 file 文件对象常用的函数:
常用的:write、writelines、read、readlines、close
方法及描述 |
---|
file.close() |
关闭文件。关闭后文件不能再进行读写操作。 |
file.flush() |
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
file.fileno() |
返回一个整型的文件描述符 (file descriptor FD 整型), 可以用在如 os 模块的 read 方法等一些底层操作上。 |
file.isatty() |
如果文件连接到一个终端设备返回 True,否则返回 False。 |
file.next() |
返回文件下一行。 |
file.read([size]) |
从文件读取指定的字节数,如果未给定或为负则读取所有。 |
file.readline([size]) |
读取整行,包括 “\n” 字符。 |
file.readlines([sizehint]) |
读取所有行并返回列表,若给定 sizeint>0,返回总和大约为 sizeint 字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
file.seek(offset[, whence]) |
设置文件当前位置 |
file.tell() |
返回文件当前位置。 |
file.truncate([size]) |
截取文件,截取的字节通过 size 指定,默认为当前文件位置。 |
file.write(str) |
将字符串写入文件,返回的是写入的字符长度。 |
file.writelines(sequence) |
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
14. 标准库和常用的类库
os、sys、shutil、re、threading、datetime、time、random、math、…
requests、urllib、numpy、pandas、matplotlib、beautifulsoup、tkinter、json、django、flask、selenium、xlwt、xlrd
更多
15. 异常处理
在python中,如果程序逻辑出错,也会抛出错误。
通过try except 进行组合使用可以捕获异常,err作为具体的异常信息进行打印处理,finally是可选的,无论是否发生异常,try except逻辑执行完毕后,会调用finally,执行相应操作
times = 0
while True:
try:
x = int(input("Please enter a number: "))
break
# except Exception as err:
except ValueError as err:
print("Oops! That was no valid number. Try again ")
print(err)
finally:
times += 1
print("End times:%d" % times)