Python基础笔记
参考 B 站 IT 私塾的Python 爬虫编程基础 5 天速成(2021 全新合集)Python 入门+数据分析视频
注释
- 单行注释
1 | # 我是注释,可以在里写一些功能说明之类的哦 |
- 多行注释
1 | ''' |
如果直接在程序中用到了中文,比如:print('你好')
,如果直接运行输出,程序会出错
解决的办法为:在程序的开头写入#coding=utf-8
注意:在 python 的语法规范中推荐使用
# -*- coding:utf-8 -*-
输出
普通输出
print('hello world')
格式化输出
1 | age = 21 |
在程序中,看到了%
这样的操作符,这就是 Python 中格式化输出。
再来一个例子:
1 | age = 21 |
常用的格式符号
格式符号 | 转换 |
---|---|
%c | 字符 |
%s | 通过 str() 字符串转换来格式化 |
%i | 有符号十进制整数 |
%d | 有符号十进制整数 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写字母) |
%X | 十六进制整数(大写字母) |
%e | 索引符号(小写'e') |
%E | 索引符号(大写'E') |
%f | 浮点实数 |
%g | %f 和%e 的简写 |
%G | %f 和%E 的简写 |
换行输出
在输出的时候,如果有\n
那么,此时\n
后的内容会在另外一行显示
1 | print("1234567890-------") # 会在一行显示 |
输入
先看一个例子:
1 | password = input("请输入密码:") |
input()的小括号中放入的是,提示信息,可省略
input()在从键盘获取了数据以后,会存放到等号左边的变量中
input()函数接受的输入必须是表达式
运算符和表达式
算术运算符
算术运算符 | 描述 |
---|---|
+ | 加 - 两个对象相加 |
- | 减 - 得到负数或是一个数减去另一个数 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 |
/ | 除 - x 除以 y |
% | 取模 - 返回除法的余数 |
** | 幂 - 返回 x 的 y 次幂 |
// | 取整除 - 向下取接近除数的整数 |
比较运算符
比较运算符 | 描述 |
---|---|
== | 等于 - 比较对象是否相等 |
!= | 不等于 - 比较两个对象是否不相等 |
> | 大于 - 返回 x 是否大于 y |
< | 小于 - 返回 x 是否小于 y。所有比较运算符返回 1 表示真返回 0 表示假。这分别与特殊的变量 True 和 False 等价 |
>= | 大于等于 - 返回 x 是否大于等于 y |
<= | 小于等于 - 返回 x 是否小于等于 y |
赋值运算符
赋值运算符 | 描述 |
---|---|
= | 简单的赋值运算符 |
+= | 加法赋值运算符 |
-= | 减法赋值运算符 |
*= | 乘法赋值运算符 |
/= | 除法赋值运算符 |
%= | 取模赋值运算符 |
**= | 幂赋值运算符 |
//= | 取整除赋值运算符 |
判断语句和循环语句
条件判断语句
if
1 | age = 30 |
if-else
1 | if True: |
如果缩进不一致,会导致运行错误
elif
1 | score = 98 |
循环语句
for
格式:
1 | for 临时变量 in 列表或者字符串等: |
例子:
1 | name = 'hassan' |
while
例子:
1 | i = 0 |
break、continue、pass
- break 语句可以跳出 for 和 while 的循环体
- continue 语句可以跳出当前循环,直接进行下一轮循环
- pass 是空语句,一般用做占位语句,不做任何事情
导入 import
在 python 用 import
或者 from import
来导入相应的模块。
将整个模块(somemodule)导入,格式为:import somemodule
从某个模块中导入某个函数,格式为:from somemodule import somefunction
从某个模块中导入多个函数,格式为:from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import \*
- 生成随机数
- 第一行代码引入库:
import random #引入随机库
- 生成指定范围的随机数:
harris = random.randint(0,2)
随机生成 0、1、2 中的一个数字,赋值给变量harris
字符串
字符串运算符
前提:a = "Hello", b = "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 |
字符串的截取和连接
1 | str='hassanwong' |
字符串的常见操作
函数 | 描述 |
---|---|
len(S) | 返回 S 字符串长度 |
join(seq) | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
lower() | 转换字符串中所有大写字符为小写 |
upper() | 转换字符串中的小写字母为大写 |
lstrip() | 截掉字符串左边的空格或指定字符 |
rstrip() | 删除字符串字符串末尾的空格 |
max(str) | 返回字符串 str 中最大的字母 |
min(str) | 返回字符串 str 中最小的字母 |
S.format () | "{} {}".format("hello", "world") # 不设置指定位置,按默认顺序'hello world' "{0} {1}".format("hello", "world") # 设置指定位置'hello world' "{1} {0} {1}".format("hello", "world") # 设置指定位置'world hello world' |
replace()
str.replace(old, new[, max])
参数:
- old -- 将被替换的子字符串。
- new -- 新字符串,用于替换 old 子字符串。
- max -- 可选字符串, 替换不超过 max 次
split()
str.split(str="", num=string.count(str)).
参数:
- str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num -- 分割次数。默认为 -1, 即分隔所有。
例子:
1 | str = "Line1-abcdef \nLine2-abc \nLine4-abcd"; |
列表 List
循环遍历
1 | namesList = ['hassan','wendy','sharon'] |
函数
函数 | 描述 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(tuple) | 将元组转换为列表 |
方法
方法 | 描述 |
---|---|
list.append(obj) | 在列表末尾添加obj |
list.count(obj) | 统计 obj 在列表中出现的次数 |
list.index(obj) | 查找列表中值为 obj 第一个匹配项的索引位置 |
list.insert(index, obj) | 将 obj插入列表下标为 index |
list.pop(index) | 移除下标为 index 的元素,并返回该元素的值 |
list.remove(obj) | 移除列表中值为 obj 的第一个匹配项 |
list.reverse() | 反转列表中元素 |
list.sort(key = None, reverse= False) | 对原列表进行排序(见下) |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
sort() 方法:key 可以指定一个排序方法;reverse = True 降序, reverse = False 升序(默认升序)。
案例:(按照第二个元素排序并输出)
1
2
3
4
5 def takeSecond(List):
return List[1]
List = [(2,2), (4,1), (1,3)]
List.sort(key=takeSecond, reverse=True)
print('降序列表:', List)输出结果:
降序列表:[(1,3), (2,2), (4,1)]
元组 Tuple
元组 tuple 和列表 list 类似,不同在于元组 tuple 元素不能修改。tuple 写在小括号里。
元组的元素不可变,但可以包含可变对象,如 list。
注意:定义只有 1 个元素的 tuple,必须加逗号,否则被当为整型 int。如:
t = (1,)
函数
函数 | 描述 |
---|---|
len(tuple) | 计算元组元素个数 |
max(tuple) | 返回元组中元素最大值 |
min(tuple) | 返回元组中元素最小值 |
tuple(list) | 将列表转换为元组 |
字典 Dictionary
根据键访问值
1 | dict = {'Name': 'hassan', 'Age': 20, 'Class': 'three'} |
在我们不确定字典中是否存在某个键而又想获取其值时,可以使用 get 方法,还可以设置默认值
1 | age = dict.get('Sex') # 'Sex'键不存在,所以age为None |
删除元素
1 | dict = {'Name': 'hassan', 'Age': 20, 'Class': 'three'} |
循环遍历
1 | for key in dict: |
常用操作
前提:dict = {'Name': 'hassan', 'Age': 20, 'Class': 'three'}
常用操作 | 描述 |
---|---|
print(dict['hassan']) | 通过 key 来访问元素并打印,不存在会抛出异常 |
print(dict.get('hassan')) | 通过 get 方法来访问元素,不存在返回 None,不抛出异常 |
dict.keys() | 获取所有 key |
dict.values() | 获取所有 value |
dict['Age'] = 21 | 新增键值对或修改 val |
del dict['hassan'] | 删除元素 |
dict.pop('hassan') | 将元素弹出 |
'hassan' in dict | 判断元素是否存在 |
dict.clear() | 清除字典内的元素 |
len() | 获取字典长度 |
max() | 获取最大的 key |
min() | 获取最小的 key |
集合 Set
集合 set 和字典 dict 类似,也是一组 key 的集合,但不存储 value,由于 key 不能重复,所以在 set 中没有重复的 key。
set 是无序的,重复元素在 set 中自动被过滤。
常用操作
常用操作 | 描述 |
---|---|
for i in s1: print(i) | 遍历集合 |
s1.update(s2) | 更新集合 |
s1.add(5) | 向集合添加新元素 |
s1.remove(5) | 移除集合中的元素 |
val = s1.pop() | 弹出元素 |
s1.clear() | 清除元素 |
del s1 | 删除元素 |
len() | 获取集合长度 |
max() | 获取最大的元素 |
min() | 获取最小的元素 |
set() | 其它类型对象转换成集合 |
函数
定义和调用函数
1 | def 函数名(): |
例子:
1 | # 定义一个函数,能够完成打印信息的功能 |
带参函数
例子:
1 | def add(a, b): |
带返回值函数
例子:
1 | def add(a, b): |
返回多个值
例子(求商和余数):
1 | def divid(a, b): |
匿名函数
语法
1 | lambda [arg1 [,arg2, ..argn]]:expression |
例子:
1 | sum = lambda arg1, arg2: arg1 + arg2 |
lambda 匿名函数使用 if 条件语句
例子:
1 | # 随意定义俩变量 |
解析:当 num 的值是偶数时显示 wife,否则显示 husband
文件
文件,就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。
文件打开
使用 open 函数,可以打开一个已经存在的文件,或者创建一个新文件
格式:open(文件名,访问模式)
模板:f = open('test.txt', 'w')
说明:
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
文件关闭
格式:close()
模板:
1 | # 新建一个文件,文件名为:test.txt |
文件写入
使用 write()可以完成向文件写入数据
例子:
1 | f = open('test.txt', 'w') |
注意:如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
文件读取
read
使用 read(num)可以从文件中读取数据,num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num,那么就表示读取文件中所有的数据.
例子:
1 | f = open('test.txt', 'r') |
如果 open 是打开一个文件,那么可以不用写打开的模式,即只写
open('test.txt')
如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的
readlines
就像 read 没有参数时一样,readlines 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
1 | #coding=utf-8 |
readline
一行一行地读取
1 | #coding=utf-8 |
文件重命名
os 模块中的 rename()可以完成对文件的重命名操作
格式:rename(需要修改的文件名, 新的文件名)
1 | import os |
文件删除
os 模块中的 remove()可以完成对文件的删除操作
格式:remove(待删除的文件名)
1 | import os |
创建文件夹
1 | import os |
获取当前目录
1 | import os |
改变默认目录
1 | import os |
获取目录列表
1 | import os |
删除文件夹
1 | import os |
错误与异常
TODO
常见问题集锦
pip install 第三方库
下载模块速度慢,或者不成功
1 | pip --default-timeout=100 install <库名称> -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com |
除了豆瓣,也可以换成下面的国内镜像网站。
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
☕欲知后事如何,
且听下回分解🍵