01 执行Python的3种方式
1.解释器python/python3
python/python3 xxx.py
2.交互式运行Python程序
- 退出方式:
exit()/ctrl+d
IPython
- IPython中“i”代表交互 interactive
- 直接输入
exit/ctrl+d退出
3.PyCharm
集成开发环境(IDE,Intergrated Development Environment)
02 PyCharm的初始设置
1.恢复初始设置
PyCharm的配置信息是保存在用户家目录下的.PyCharmxxx.x目录下的,xxxx.x表示当前使用的PyCharm的版本号
- 删除
PyCharm的配置信息目录:rm -r ~/.PyCharm2016.3
2.打开Python项目
- 打开之后,会在目录下新创建一个
.idea的目录,用于保存项目相关的信息,例如解释器版本、项目包含的文件等等 - 设置项目使用的解释器版本
File/Settings…打开设置窗口-->Project-->Project Interpreter
3.安装和启动
tar -zxvf pycharm-professional-2017.1.3.tar.gz将解压缩后的目录移动到
/opt目录下,方便其他用户使用sudo mv pycharm-2017.1.3/ /opt//opt目录用户存放给主机额外安装的软件cd /opt/pycharm-2017.1.3/bin./pycharm.sh
- 设置专业版启动图标:
Tools–>Create Desktop Entry–>Create the entry for all users
在
ubuntu中,应用程序启动的快捷方式通常都保存在/usr/share/applications目录下
4.程序卸载
- 删除解压缩目录:
sudo rm -r /opt/pycharm-2016.3.1/ - 删除家目录下用于保存配置信息的隐藏目录:
rm-r ~/.PyCharm2016.3/
如果不再使用PyCharm还需要将
/usr/share/applications/下的detbrains-pycharm.desktop删掉
03 代码规范
- 单行注释:
# - 多行注释:“”“ ”“”/‘’‘ ’‘’
- PEP8
- google中文文档
04 算术运算符
1.算术运算符
| 运算符 | 描述 | 实例 |
|---|---|---|
| // | 取整除 | 返回除法的整数部分(商)9//2=4 |
| ** | 幂 | 又称次方、城防 2**3=8 |
- 在Python中
*运算符还可以用于字符串
输入 "-" * 40输出 '----------------------------------------'
2.算术运算符的优先级
- **最高优先级
03 变量的类型
1.变量的类型
- 数字型
- 整型(
int) - 浮点型(
float) - 布尔型(
bool)- 真
True非0数 - 假
False0
- 真
- 复数型(
complex)- 主要用于科学计算,例如:平面场问题、波动问题、电感电容等
- 整型(
- 非数字型
- 字符串
- 列表
- 元组
- 字典
2.不同类型变量之间的计算
- 字符串变量之间使用
+拼接字符串 - 字符串变量可以和整数使用
*重复拼接相同的字符 - 数字型变量和字符串之间不能进行其他计算
3.变量的输入
字符串变量 = input("提示信息:")[1]- 类型转换函数:
int(x)float(x)
4.变量的格式化输出
%被常委格式化操作符,专门用于处理字符串的格式- 包含
%的字符串,被称为格式化字符串 %和不同的字符连用,不同类型的数据需要用不同的格式化字符 | 格式化字符 | 含义 | | —- | —- | |%s| 字符串 | |%d| 有符号十进制整数,%06d
表示输出的整数显示位数,不足的地方使用0补全 | |%f| 浮点数,%.02f
表示小数点后只显示两位 | |%%| 输出%|
- 包含
print("格式化字符串" % 变量1)print("格式化字符串" % (变量1,变量2...))
04 变量的命名
Python中标识符是区分大小写的
- 在定义变量时,为了保证代码格式,
=的左右应该保留一个空格 - 在
Python中,如果变量名需要由二个或多个单词组成时,可以按照以下方式命名
a. 每个单词都使用小写字母
b. 单词与单词之间使用_连接
c. 例如:first_name、last_name
05 判断(if)语句
1.if语法
if 要判断的条件:条件成立时,要做的事情......else:条件不成立时,要做的事情......
2.逻辑运算
- 与:
条件1 and 条件2 - 或:
条件1 or 条件2 - 非:
not 条件
3.语法进阶
if 条件1:条件1满足执行的代码......elif 条件2:条件2满足执行的代码......elif 条件3:条件3满足执行的代码......else:以上条件都不满足时,执行的代码......
Tab
Shift+Tab
Ctrl+/注释换行的格式:
if (()or ()or ()):
随机数的处理
import randomrandom.randint(10,20)
06 循环
1.while的基本语法
while 条件(判断 计数器 是否达到 目标次数):条件满足时,做的事情1条件满足时,做的事情2条件满足时,做的事情3......处理条件(计数器)
2.break和continue
break某一条件满足时,退出循环,不再执行后续重复的代码continue某一条件满足时,不执行后续重复代码
3.print
- 在默认情况下,
print函数输出内容之后,会自动在内容末尾增加换行 - 如果不希望末尾增加换行,可以在
print函数输出内容的后面增加, end="" - 其中
""中间可以指定print函数输出内容之后,继续希望显示的内容
# 向控制台输出内容结束之后,不会换行print("*", end="")# 单纯的换行print("")
4.转义字符
| 转义字符 | 描述 |
|---|---|
\\' |
单引号 |
\\" |
双引号 |
07 函数基础
1.函数的定义
def 函数名():函数封装的代码......
2.函数的文档注释
- 函数上方隔两行
- 定义函数的下方,给函数添加注释
- 函数调用位置,使用快捷键
ctrl+q可以查看函数的说明信息
08 高级变量类型
- 在
Python中,所有的非数字型变量都支持以下特点:- 都是一个序列
sequence,也可以理解为容器 - 取值
[] - 遍历
for in - 计算长度、最大/最小值、比较、删除
- 链接
+和重复* - 切片
- 都是一个序列
1.列表
- 列表用
[]定义,数据之间使用,分隔
name_list.append name_list.count name_list.insertname_list.reverse name_list.clear name_list.extendname_list.pop name_list.sort name_list.copyname_list.index name_list.remove
| 序号 | 分类 | 关键字/函数/方法 | 说明 |
|---|---|---|---|
| 1 | 增加 | 列表.insert(索引,数据) | 在指定位置插入数据 |
| 列表.append(数据) | 在末尾追加数据 | ||
| 列表.extend(列表2) | 将列表2的数据追加到列表 | ||
| 2 | 修改 | 列表[索引] = 数据 | 修改指定索引的数据 |
| 3 | 删除 | del[2] 列表[索引] |
删除指定索引的数据 |
| 列表.remove[数据] | 删除第一个出现的指定数据 | ||
| 列表.pop | 删除末尾数据 | ||
| 列表.pop(索引) | 删除指定索引数据 | ||
| 列表.clear | 清空列表 | ||
| 4 | 统计 | len(列表) | 列表长度 |
| 列表.count(数据) | 数据在列表中出现的次数 | ||
| 5 | 排序 | 列表.sort() | 升序排序 |
| 列表.sort (reverse=True) |
降序排序 | ||
| 列表.revrese() | 逆序、反转 |
- 如果使用del关键字将变量从内存中删除,后续的代码就不能再使用这个变量了
2.链表循环遍历
- 在
Python中为了提高列表的遍历效率,专门提供的迭代iteration遍历 使用
for就能够实现迭代遍历"""顺序的从列表中一次获取数据,每一次循环过程中,数据都会保存在name这个变量中,再循环体内部可以访问到当前这一次获取到的数据"""for name in name_list:print(name)
在
Python中,可以使用for循环遍历所有非数字型类型的变量:列表、元组、字典以及字符串
3.元组
Tuple(元组)与列表类似,不同之处在于元组的元素不能修改- 元组表示多个元素组成的序列
- 元组在
Python开发中,有特定的应用场景
- 用于存储一串信息,数据之间使用
,分隔 - 元组用
()定义 - 元组中只包含一个元素时,需要在元素后面添加逗号
info.countinfo.index- 格式化字符串,格式化字符串后面的
()本质上就是一个元组
4.元组和列表之间的转换
list(元组)tuple(列表)
5.字典
dictionary(字典)时除列表意外Python之中最灵活的数据类型- 字典同样可以用来存储多个数据
- 通常用于存储描述一个
**物体**的相关信息
- 通常用于存储描述一个
- 字典是无序的对象集合
- 字典用
{}定义 - 字典使用键值对存储数据,键值对之间使用
,分隔- 键
key是索引 - 值
value是数据 - 键和值之间使用
:分隔 - 键必须是唯一的
- 值可以去任何数据类型,但键只能使用字符串、数字或元组
- 键
- 遍历时,变量k时每一次循环中,获取的键值对的key
xiaoming_dict = {"name": "小明"}print(xiaoming_dict["name"])xiaoming_dict["age"] = 18xiaoming_dict.pop("age")temp_dict = {"gender": True,"height: 1.75","weight": 75.75}xiaoming_dict.update(temp_dict)print(xiaoming_dict)xiaoming_dict.clear()for k in xiaoming_dict:print("%s - %s" % (k, xiaoming_dict[k]))
6.字符串
- 在
Python中可以使用一对双引号"或者一对单引号'定义一个字符串
6.1 判断类型
| 方法 | 说明 |
|---|---|
string.isspace() |
如果string中只包含空格,则返回True |
string.isalnum() |
如果string至少有一个字符并且所有字符都是字母或数字则返回True |
string.isalpha() |
如果string至少有一个字符并且所有字符都是字母则返回True |
string.isdecimal() |
如果string只包含数字则返回True,全角数字 |
string.isdigit() |
如果string只包含数字则返回True,全角数字、(1)[3] 、\u00b2 |
string.isnumeric() |
如果string只包含数字则返回True,全角数字、汉字数字 |
string.istitle() |
如果string是标题化的(每个单词的首字母大写)则返回True |
string.islower() |
如果string中包含至少一个区分大小写的字符,兵器让所有这些(区分大小写的)字符都是小写,则返回True |
string.isupper() |
如果string中包含至少一个区分大小写的字符,兵器让所有这些(区分大小写的)字符都是大写,则返回True |
6.2 查找和替换
| 方法 | 说明 |
|---|---|
string.startswith(str) |
检查字符串是否是以str开头,是则返回True |
string.endwith(str) |
检查字符串是否是以str结束,是则返回True |
string.find(str.start=0,end=len(string)) |
检查str是否包含在string中,如果start和end指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
string.rfind(str,start=0,end=len(string)) |
类似于find()函数,不过是从右边开始查找 |
string.index(str,start=0,end=len(string)) |
跟find()方法类似,只不过如果str不在string会报错 |
string.rindex(str,start=0,end=len(string)) |
类似index(),不过是从右边开始 |
string.replace(old_str,new_str,num=string.count(old)) |
把string中的old_str替换成new_str,如果num指定,则替换不超过num次 |
6.3 大小写转换
| 方法 | 说明 |
|---|---|
string.capitalize() |
把字符串的第一个字符大写 |
string.title() |
把字符串的每个单词首字母大写 |
string.lower() |
转换string中所有大写字符为小写 |
string.upper() |
转换string中的小写字母为大写 |
string.swapcase() |
翻转string中的大小写 |
6.4 文本对齐
| 方法 | 说明 |
|---|---|
string.ljust(width) |
返回原字符串左对齐,并使用空格填充至长度width的新字符串 |
string.rjust(width) |
返回原字符串右对齐,并使用空格填充至长度width的新字符串 |
string.center(width) |
返回原字符串居中,并使用空格填充至长度width的新字符串 |
6.5 去除空白字符
| 方法 | 说明 |
|---|---|
string.lstrip() |
截掉string左边(开始)的空白字符 |
string.rstrip() |
截掉string右边(末尾)的空白字符 |
string.strip() |
截掉string左右两边的空白字符 |
6.6 拆分和连接
| 方法 | 说明 |
|---|---|
string.partition(str) |
把字符串string分成3元素的元组(str前面,str,str后面) |
stringrpartition(str) |
类似于partition()函数,不过是从右边开始查找 |
string.split(str="",num) |
以str为分隔符切片string,如果num有指定值,则仅分隔num+1个字符串,str默认包含‘\r’,‘\n’和空格 |
string.splitlines() |
按照行(‘\r’,‘\n’,‘\r\n’)分隔,返回一个包含各行作为元素的列表 |
string,join(sep) |
以string为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串 |
# 先使用strip方法去除字符串中的空白字符# 在使用center方法居中显示文本print("|%s|" % poem_str.strip().center(10," "))
6.7 字符串的切片
字符串[开始索引:结束索引:步长]
python中最后一个索引为-1
7.公共方法
7.1 Python内置函数
| 函数 | 描述 | 备注 |
|---|---|---|
| len(item) | 计算容器中元素个数 | |
| del(item) | 删除变量 | del有两种方式[4] |
| max(item) | 返回容器中元素的最大值 | 如果是字典,只针对key比较 |
| min(item) | 返回容器中元素的最小值 | 如果是字典,只针对key比较 |
| cmp(item1,item2) | 比较两个值,-1小于/0相等/1大于 | Python3.x取消了cmp函数 |
- 字符串比较符合以下规则:“0”<“A”<“a”
- 字典不能进行比较
7.2 切片
| 描述 | Python表达式 | 结果 | 支持的数据类型 |
|---|---|---|---|
| 切片 | “0123456789”[::-2] | “97531” | 字符串、列表、元组 |
7.3 运算符[5]
| 运算符 | Python表达式 | 结果 | 描述 |
|---|---|---|---|
| + | [1,2]+[3,4] | [1,2,3,4] | 合并 |
| * | [“Hi!”]*4 | [‘Hi!’,‘Hi!’,‘Hi!’,‘Hi!’] | 重复 |
| in | 3 in (1,2,3) | True | 元素是否存在 |
| not in | 4 not in (1,2,3) | True | 元素是否不存在 |
| > >= == < <= | (1,2,3) < (2,2,3) | True | 元素比较 |
7.4 完整的for循环语法
for 变量 in 集合:循环体代码else:没有通过break退出循环,循环结束后,会执行的代码
8.名片管理系统
pass
- 如果在开发程序时,不希望立刻编写分支内部的代码,可以通过
pass关键字,表示一个占位符,能够保证程序的代码结构正确,程序运行时不会执行任何操作
TODO注释
在
#后跟上TODO,用于标记需要去做的工作# TODO(作者/邮件) 显示系统菜单
9.LINUX上的Shebang符号(#!)
#!这个符号叫做Shebang或者Sha_bangShebang通常在Unix系统脚本中的第一行开头使用
使用Shebang的步骤
- 使用
which查询python3解释器所在的路径which python3 - 修改要运行的主python文件,在第一行加以下内容
#! /usr/bin/python3 - 修改主python文件的文件限制,增加执行权限
chmod +x cards_main.py - 在需要时执行程序即可
.cards_main.py
09 变量进阶
1.引用的概念
在Python中
- 变量和数据都是保存在内存中,分开存储的
- 函数的参数传递以及返回值都是靠引用传递的
- 数据保存在内存中的一个位置
- 变量中保存着数据在内存中的地址
- 变量中记录数据的地址,就叫做引用
- 使用
id()函数可以查看变量中保存数据所在的内存地址
如果变量已经被定义,当给一个变量赋值的时候,本质上是修改数据的引用
- 变量不再对之前的数据引用
- 变量改为对新赋值的数据引用
2.函数的参数和返回值的传递
在Python中,函数的实参/返回值都是靠引用来传递的
3.可变和不可变类型
- 不可变类型,内存中的数据不允许被修改
- 数字类型
int,bool,float,complex,long(2,x) - 字符串
str - 元组
tuple
- 数字类型
- 可变类型,内存中的数据可以被修改(通过方法调用)
- 列表
list - 字典
dict
- 列表
字典的
key只能使用不可变类型的数据
- 可变类型的数据变化,是通过方法来实现的
- 如果给一个可变类型的变量,赋予了一个新的数据,引用会修改
- 变量不再对之前的数据引用
- 变量改为对新赋值的数据引用
哈希(hash)
Python中内置有一个名字叫做hash(0)的函数- 接受一个不可变类型的数据作为参数
- 返回结果是一个整数
哈希是一种算法,起作用就是提取数据的特征码(指纹)- 相同的内容得到相同的结果
- 不同的内容得到不同的结果
- 在
Python中,设置字典的键值对时,会首先对key进行hash已决定如何在内存中保存字典的数据,以方便后续对字典的操作:增、删、改、查- 键值对的
key必须是不可变类型数据 - 键值对的
value可以是任意类型的数据
- 键值对的
4.局部变量和全局变量
- 首先查找函数内部是否存在指定名称的局部变量,如果有,直接使用
- 如果没有,查找函数外部是否存在指定名称的全局变量,如果有,直接使用
- 如果还没有,程序报错!
- 在函数内部,可以通过全局变量的引用获取对应的数据
- 但是,不允许直接修改全局变量的引用——使用赋值语句修改全局变量的值
- 如果在函数中需要修改全局变量,需要用
global进行声明- 先仅进行声明,声明之后再进行操作
- 全局变量名前应该增加
g_或者gl_的前缀
10 函数的参数和返回值
1.函数的返回值
- 元组-可以包含多的数据,因此可以使用元组让函数一次返回多个值
- 如果函数返回的是元组,小括号可以省略
- 如果函数返回的类型是元组,同时希望单独的处理元组中的元素
- 可以使用多个变量,一次接受函数的返回结果
- 使用多个变量接收结果时,变量的个数应该和元组中元素的个数保持一致 ```python def measure(): temp = 35 wetness = 50 return temp,wetness
gl_temp,gl_wetness = measure()
print(gl_temp) print(gl_wetness)
- 交换两个变量的值<br />`a, b = b, a`<a name="7b369b98"></a>### 2.函数的参数- 在函数内部,针对函数使用**赋值语句**,**不会**影响调用函数时传递的**实参变量**- 如果传递的参数是**可变类型**,在函数内部,使用**方法**,修改了数据的内容,**同样会影响到外部的数据**- 在`Python`中,**列表变量**调用`+=`本质上是执行变量的`extend`方法,不会修改变量的引用<a name="93fa456b"></a>#### 2.1 缺省参数- 定义函数时,可以给**某个参数**指定一个**默认值**,具有默认值的参数就叫**缺省参数**- 调用函数时,如果没有传入**缺省参数**的值,则在函数内部使用定义函数时指定的**参数默认值**- 函数的缺省参数,**将常见的值设置为参数的缺省值**,从而**简化函数的调用**- **必须保证带默认值的缺省参数在参数列表末尾**- 在**调用函数时**,如果有**多个缺省参数**,**需指定参数名**<a name="bf490445"></a>#### 2.2 多值参数- 有时可能需要**一个函数**能够处理的参数**个数**是不确定的,这个时候,就可以使用多值参数- `python`中有**两种**多指参数:- 参数名前增加**一个**`*`可以接收**元组**- 参数名前增加**两个**`*`可以接收**字典**- 一般在给多指参数命名时,**习惯**使用以下两个名字- `*args`——存放**元组**参数,前面有一个`*`- `**kwargs`——存放**字典**参数,前面有两个`*`- `args`是`arguments`的缩写,有变量的含义- `kw`是`keyword`的缩写,`kwargs`可以记忆**键值对参数**```pythondef demo(num, *nums, **person):print(num)print(nums)print(person)demo(1, 2, 3, 4, name = "小明", age = 18, gender = True)
2.3元组和字典的拆包
- 在调用带有多指参数的函数时,如果希望:
- 将一个元组变量,直接传递给
args - 将一个字典变量,直接传递给
kwargs
- 将一个元组变量,直接传递给
- 就可以使用拆包,简化参数的传递,拆包的方式是:
- 在元组变量前,增加一个
* - 在字典变量前,增加两个
*
- 在元组变量前,增加一个
def demo(*args, **kwargs):print(args)print(kwargs)gl_nums = [1, 2, 3, 4]gl_dict = {"name": "小明", "age": 18}demo(*gl_nums, **gl_dict)
