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.安装和启动

  1. tar -zxvf pycharm-professional-2017.1.3.tar.gz
  2. 将解压缩后的目录移动到/opt目录下,方便其他用户使用
    sudo mv pycharm-2017.1.3/ /opt/

    /opt目录用户存放给主机额外安装的软件

  3. cd /opt/pycharm-2017.1.3/bin

  4. ./pycharm.sh
  • 设置专业版启动图标:Tools–>Create Desktop Entry–>Create the entry for all users

ubuntu中,应用程序启动的快捷方式通常都保存在/usr/share/applications目录下

4.程序卸载

  1. 删除解压缩目录:sudo rm -r /opt/pycharm-2016.3.1/
  2. 删除家目录下用于保存配置信息的隐藏目录:rm-r ~/.PyCharm2016.3/

如果不再使用PyCharm还需要将/usr/share/applications/下的detbrains-pycharm.desktop删掉

03 代码规范

04 算术运算符

1.算术运算符

运算符 描述 实例
// 取整除 返回除法的整数部分(商)9//2=4
** 又称次方、城防 2**3=8
  • 在Python中*运算符还可以用于字符串
  1. 输入 "-" * 40
  2. 输出 '----------------------------------------'

2.算术运算符的优先级

  • **最高优先级

03 变量的类型

1.变量的类型

  • 数字型
    • 整型(int)
    • 浮点型(float)
    • 布尔型(bool)
      • True 非0数
      • False 0
    • 复数型(complex)
      • 主要用于科学计算,例如:平面场问题、波动问题、电感电容等
  • 非数字型
    • 字符串
    • 列表
    • 元组
    • 字典

2.不同类型变量之间的计算

  • 字符串变量之间使用+拼接字符串
  • 字符串变量可以和整数使用*重复拼接相同的字符
  • 数字型变量和字符串之间不能进行其他计算

3.变量的输入

  • 字符串变量 = input("提示信息:")[1]
  • 类型转换函数:int(x) float(x)

4.变量的格式化输出

  • %被常委格式化操作符,专门用于处理字符串的格式
    • 包含%的字符串,被称为格式化字符串
    • %和不同的字符连用,不同类型的数据需要用不同的格式化字符 | 格式化字符 | 含义 | | —- | —- | | %s | 字符串 | | %d | 有符号十进制整数,%06d
      表示输出的整数显示位数,不足的地方使用0补全 | | %f | 浮点数,%.02f
      表示小数点后只显示两位 | | %% | 输出% |
  1. print("格式化字符串" % 变量1)
  2. print("格式化字符串" % (变量1,变量2...))

04 变量的命名

  • Python中标识符是区分大小写的
  1. 在定义变量时,为了保证代码格式,=的左右应该保留一个空格
  2. Python中,如果变量名需要由二个多个单词组成时,可以按照以下方式命名
    a. 每个单词都使用小写字母
    b. 单词与单词之间使用_连接
    c. 例如:first_namelast_name

05 判断(if)语句

1.if语法

  1. if 要判断的条件:
  2. 条件成立时,要做的事情
  3. ......
  4. else:
  5. 条件不成立时,要做的事情
  6. ......

2.逻辑运算

  • 与:条件1 and 条件2
  • 或:条件1 or 条件2
  • 非:not 条件

3.语法进阶

  1. if 条件1:
  2. 条件1满足执行的代码
  3. ......
  4. elif 条件2:
  5. 条件2满足执行的代码
  6. ......
  7. elif 条件3:
  8. 条件3满足执行的代码
  9. ......
  10. else:
  11. 以上条件都不满足时,执行的代码
  12. ......

Tab

Shift+Tab

Ctrl+/ 注释

换行的格式:

  1. if (()
  2. or ()
  3. or ()):

随机数的处理

  1. import random
  2. random.randint(10,20)

06 循环

1.while的基本语法

  1. while 条件(判断 计数器 是否达到 目标次数):
  2. 条件满足时,做的事情1
  3. 条件满足时,做的事情2
  4. 条件满足时,做的事情3
  5. ......
  6. 处理条件(计数器)

2.break和continue

  • break某一条件满足时,退出循环,不再执行后续重复的代码
  • continue某一条件满足时,不执行后续重复代码

3.print

  • 在默认情况下,print函数输出内容之后,会自动在内容末尾增加换行
  • 如果不希望末尾增加换行,可以在print函数输出内容的后面增加, end=""
  • 其中""中间可以指定print函数输出内容之后,继续希望显示的内容
  1. # 向控制台输出内容结束之后,不会换行
  2. print("*", end="")
  3. # 单纯的换行
  4. print("")

4.转义字符

转义字符 描述
\\' 单引号
\\" 双引号

07 函数基础

1.函数的定义

  1. def 函数名():
  2. 函数封装的代码
  3. ......

2.函数的文档注释

  • 函数上方隔两行
  • 定义函数的下方,给函数添加注释
  • 函数调用位置,使用快捷键ctrl+q可以查看函数的说明信息

08 高级变量类型

  • Python中,所有的非数字型变量都支持以下特点:
    1. 都是一个序列sequence,也可以理解为容器
    2. 取值[]
    3. 遍历for in
    4. 计算长度、最大/最小值、比较、删除
    5. 链接+重复*
    6. 切片

1.列表

  • 列表用[]定义,数据之间使用,分隔
  1. name_list.append name_list.count name_list.insert
  2. name_list.reverse name_list.clear name_list.extend
  3. name_list.pop name_list.sort name_list.copy
  4. name_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就能够实现迭代遍历

    1. """
    2. 顺序的从列表中一次获取数据,每一次循环过程中,数据都会保存在name这个变量中,再循环体内部可以访问到当前这一次获取到的数据
    3. """
    4. for name in name_list:
    5. print(name)
  • Python中,可以使用for循环遍历所有非数字型类型的变量:列表、元组、字典以及字符串

3.元组

  • Tuple(元组)与列表类似,不同之处在于元组的元素不能修改
    • 元组表示多个元素组成的序列
    • 元组Python开发中,有特定的应用场景
  • 用于存储一串信息数据之间使用,分隔
  • 元组用()定义
  • 元组中只包含一个元素时,需要在元素后面添加逗号
  • info.count info.index
  • 格式化字符串,格式化字符串后面的()本质上就是一个元组

4.元组和列表之间的转换

  • list(元组)
  • tuple(列表)

5.字典

  • dictionary(字典)时除列表意外Python之中最灵活的数据类型
  • 字典同样可以用来存储多个数据
    • 通常用于存储描述一个**物体**的相关信息
  • 字典是无序的对象集合
  • 字典用{}定义
  • 字典使用键值对存储数据,键值对之间使用,分隔
    • key是索引
    • value是数据
    • 之间使用:分隔
    • 键必须是唯一的
    • 可以去任何数据类型,但只能使用字符串数字元组
  • 遍历时,变量k时每一次循环中,获取的键值对的key
  1. xiaoming_dict = {"name": "小明"}
  2. print(xiaoming_dict["name"])
  3. xiaoming_dict["age"] = 18
  4. xiaoming_dict.pop("age")
  5. temp_dict = {"gender": True,
  6. "height: 1.75",
  7. "weight": 75.75}
  8. xiaoming_dict.update(temp_dict)
  9. print(xiaoming_dict)
  10. xiaoming_dict.clear()
  11. for k in xiaoming_dict:
  12. 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中所有的元素(的字符串表示)合并为一个新的字符串
  1. # 先使用strip方法去除字符串中的空白字符
  2. # 在使用center方法居中显示文本
  3. 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循环语法

  1. for 变量 in 集合:
  2. 循环体代码
  3. else:
  4. 没有通过break退出循环,循环结束后,会执行的代码

8.名片管理系统

pass

  • 如果在开发程序时,不希望立刻编写分支内部的代码,可以通过pass关键字,表示一个占位符,能够保证程序的代码结构正确,程序运行时不会执行任何操作

TODO注释

  • #后跟上TODO,用于标记需要去做的工作

  • # TODO(作者/邮件) 显示系统菜单

9.LINUX上的Shebang符号(#!)

  • #!这个符号叫做Shebang或者Sha_bang
  • Shebang通常在Unix系统脚本中的第一行开头使用

使用Shebang的步骤

  1. 使用which查询python3解释器所在的路径
    which python3
  2. 修改要运行的主python文件,在第一行加以下内容
    #! /usr/bin/python3
  3. 修改主python文件的文件限制,增加执行权限
    chmod +x cards_main.py
  4. 在需要时执行程序即可
    .cards_main.py

09 变量进阶

1.引用的概念

Python

  • 变量数据都是保存在内存中,分开存储的
  • 函数参数传递以及返回值都是靠引用传递的
  • 数据保存在内存中的一个位置
  • 变量中保存着数据在内存中的地址
  • 变量记录数据的地址,就叫做引用
  • 使用id()函数可以查看变量中保存数据所在的内存地址

如果变量已经被定义,当给一个变量赋值的时候,本质上是修改数据的引用

  • 变量不再对之前的数据引用
  • 变量改为对新赋值的数据引用

2.函数的参数和返回值的传递

Python中,函数的实参/返回值都是靠引用来传递的

3.可变和不可变类型

  • 不可变类型,内存中的数据不允许被修改
    • 数字类型int,bool,float,complex,long(2,x)
    • 字符串str
    • 元组tuple
  • 可变类型,内存中的数据可以被修改(通过方法调用)
    • 列表list
    • 字典dict

字典的key只能使用不可变类型的数据

  1. 可变类型的数据变化,是通过方法来实现的
  2. 如果给一个可变类型的变量,赋予了一个新的数据,引用会修改
    • 变量不再对之前的数据引用
    • 变量改为对新赋值的数据引用

哈希(hash)

  • Python中内置有一个名字叫做hash(0)的函数
    • 接受一个不可变类型的数据作为参数
    • 返回结果是一个整数
  • 哈希是一种算法,起作用就是提取数据的特征码(指纹)
    • 相同的内容得到相同的结果
    • 不同的内容得到不同的结果
  • Python中,设置字典的键值对时,会首先对key进行hash已决定如何在内存中保存字典的数据,以方便后续对字典的操作:增、删、改、查
    • 键值对的key必须是不可变类型数据
    • 键值对的value可以是任意类型的数据

4.局部变量和全局变量

  1. 首先查找函数内部是否存在指定名称局部变量,如果有,直接使用
  2. 如果没有,查找函数外部是否存在指定名称全局变量,如果有,直接使用
  3. 如果还没有,程序报错!
  • 在函数内部,可以通过全局变量的引用获取对应的数据
  • 但是,不允许直接修改全局变量的引用——使用赋值语句修改全局变量的值
  • 如果在函数中需要修改全局变量,需要用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)

  1. - 交换两个变量的值<br />`a, b = b, a`
  2. <a name="7b369b98"></a>
  3. ### 2.函数的参数
  4. - 在函数内部,针对函数使用**赋值语句**,**不会**影响调用函数时传递的**实参变量**
  5. - 如果传递的参数是**可变类型**,在函数内部,使用**方法**,修改了数据的内容,**同样会影响到外部的数据**
  6. - `Python`中,**列表变量**调用`+=`本质上是执行变量的`extend`方法,不会修改变量的引用
  7. <a name="93fa456b"></a>
  8. #### 2.1 缺省参数
  9. - 定义函数时,可以给**某个参数**指定一个**默认值**,具有默认值的参数就叫**缺省参数**
  10. - 调用函数时,如果没有传入**缺省参数**的值,则在函数内部使用定义函数时指定的**参数默认值**
  11. - 函数的缺省参数,**将常见的值设置为参数的缺省值**,从而**简化函数的调用**
  12. - **必须保证带默认值的缺省参数在参数列表末尾**
  13. - 在**调用函数时**,如果有**多个缺省参数**,**需指定参数名**
  14. <a name="bf490445"></a>
  15. #### 2.2 多值参数
  16. - 有时可能需要**一个函数**能够处理的参数**个数**是不确定的,这个时候,就可以使用多值参数
  17. - `python`中有**两种**多指参数:
  18. - 参数名前增加**一个**`*`可以接收**元组**
  19. - 参数名前增加**两个**`*`可以接收**字典**
  20. - 一般在给多指参数命名时,**习惯**使用以下两个名字
  21. - `*args`——存放**元组**参数,前面有一个`*`
  22. - `**kwargs`——存放**字典**参数,前面有两个`*`
  23. - `args``arguments`的缩写,有变量的含义
  24. - `kw``keyword`的缩写,`kwargs`可以记忆**键值对参数**
  25. ```python
  26. def demo(num, *nums, **person):
  27. print(num)
  28. print(nums)
  29. print(person)
  30. demo(1, 2, 3, 4, name = "小明", age = 18, gender = True)

2.3元组和字典的拆包

  • 在调用带有多指参数的函数时,如果希望:
    • 将一个元组变量,直接传递给args
    • 将一个字典变量,直接传递给kwargs
  • 就可以使用拆包,简化参数的传递,拆包的方式是:
    • 元组变量前,增加一个*
    • 字典变量前,增加两个*
  1. def demo(*args, **kwargs):
  2. print(args)
  3. print(kwargs)
  4. gl_nums = [1, 2, 3, 4]
  5. gl_dict = {"name": "小明", "age": 18}
  6. demo(*gl_nums, **gl_dict)