python
- 版本python3.6.5~3.7.8
- 教学版本python3.7.6
- 安装包 提取码:r01t
- IDE: VSCode 或者 pycharm(推荐)
- pycharm安装包 提取码:d8k1
- VSCode安装包 提取码:aqeb
python发展史
Python之父,荷兰人Guido van Rossum。他于1982年从阿姆斯特丹大学取得了数学和计算机硕士学位。
20世纪80年代中期,Python之父Guido van Rossum还在CWI(数学和理论计算机科学领域的研究中心,位于阿姆斯特丹)为ABC语言贡献代码。ABC语言是一个为编程初学者打造的研究项目。ABC语言给了Python之父Guido很大影响,Python从ABC语言中继承了很多东西:比如字符串、列表和字节数列都支持索引、切片排序和拼接操作。
在CWI工作了一段时间后,Guido构思了一门致力于解决问题的编程语言,他觉得现有的编程语言对非计算机专业的人十分不友好。于是,1989年12月份,为了打发无聊的圣诞节假期,Guido开始写Python的第一个版本。值得一提的是Python这个名字的由来,Python有蟒蛇的意思,但Guido起这个名字完全和蟒蛇没有关系。当Guido在实现Python的时候,他还阅读了Monty Python’s Flying Circus的剧本,这是来自一部来自20世纪70年代的BBC喜剧。Guido认为他需要一个简短、独特且略显神秘的名字,因此他决定将该语言称为Python。
1991年,Python的第一个解释器诞生了。他是由C语言实现的,有很多语法来自C,又受到了很多ABC语言的影响。有很多来自ABC语言的语法,知道今天还很有争议,强制缩进就是其中之一。要知道,大多数语言都是代码风格自由的,即:不在乎缩进有多少,写在哪一行,只要有必要的空格即可。而Python是必须要有缩进的,这也导致了很多其他语言的程序员开玩笑说“Python程序员必须会要用游标卡尺。”
Python1.0版本于1994年1月发布,这个版本的主要新功能是lambda, map, filter和reduce,但是Guido不喜欢这个版本。
六年半之后的2000年10月份,Python2.0发布了。这个版本的主要新功能是内存管理和循环检测垃圾收集器以及对Unicode的支持。然而,尤为重要的变化是开发的流程的改变,Python此时有了一个更透明的社区。
2008年的12月份,Python3.0发布了。Python3.x不向后兼容Python2.x,这意味着Python3.x可能无法运行Python2.x的代码。Python3代表着Python语言的未来。
1.Hello Python
- 安装完成之后打开cmd命令行,输入python检查是否安装成功
- 输入print(‘Hello python’)
2.python的语言性质
- python是一种解释型语言,代码直接通过解释器解释,无需编译
- python是一门面向对象的语言,在python里,一切皆对象。
- python也是一门强类型的语言,也是一种动态的语言,亦可以做脚本,整体与JavaScript较为类似
- python与Java在语法上有比较大的区别,所以以前学过Java但是没有学过python的同学需要认真注意细节
- 在python中有两种类型的注释一种是行注释 用一个# ,另一种是块注释用三对引号
# 这是单行注释
"""
这是块注释
"""
'''
这也是块注释
'''
3.标识符与关键字
and | as | assert | break | class | continue |
---|---|---|---|---|---|
def | del | elif | else | except | finally |
for | from | False | global | if | import |
in | is | lambda | nonlocal | not | None |
or | pass | raise | return | try | True |
while | with | yield |
需要注意的是,由于 Python 是严格区分大小写的,保留字也不例外。所以,我们可以说 if 是保留字,但 IF 就不是保留字。
- 标识符:即变量名,函数名,类名等
- python的标识符命名规则:由数字、字母、下划线组成,不能以数字开头,不能跟关键字重名
- python的的变量定义不需要申明类型,也不需要分号结尾
- Python命名规范同样遵循驼峰命名法
- 代码规范遵循PEP8标准
4.数据类型
内置数据类型
在编程中,数据类型是一个重要的概念。
变量可以存储不同类型的数据,并且不同类型可以执行不同的操作。
在这些类别中,Python 默认拥有以下内置数据类型:
文本类型:(基本数据类型) | str |
---|---|
数值类型:(基本数据类型) | int, float, complex(了解复数类型,科学计数法) |
序列类型:(引用数据类型) | list, tuple, range |
映射类型:(引用数据类型) | dict |
集合类型:(引用数据类型) | set, frozenset |
布尔类型:(基本数据类型) | bool |
二进制类型:(了解) | bytes, bytearray, memoryview |
- 我们可以用type()函数来查看一个变量的数据类型,可以用id() 来查看变量的id
a = 10
b = "hello"
c = 3.0
d = True
print(type(a)) # <class 'int'>
print(type(b)) # <class 'str'>
print(type(c)) # <class 'float'>
print(type(d)) # <class 'bool'>
# 字符串的其他表示形式
b = 'hello'
print(b)
b = '''hello'''
print(b)
- 类型转换
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/8/6 23:45
# @Author : GHong
a = 10.1
b = "10.1"
a = int(a)
print(a) # 10
print(type(a)) # <class 'int'> float --> int
a = str(a)
print(a) # 10
print(type(a)) # <class 'str'> int --> str
# b = int(b) # ValueError 错误,原因字符串去掉括号的数值是一个float,一次性只能做一级转换
b = float(b)
print(b) # 10.1
print(type(b)) # <class 'float'> str --> float
c = True
c = str(c)
print(c) # True
print(type(c)) # <class 'str'> bool --> str
c = bool(c)
print(c) # True
print(type(c)) # <class 'bool'> str --> bool 注意!这里并不是因为字符串是True才转换成True,这里只要
print("--------")
print(bool("False")) # True
print(bool("")) # 除非是空串 --> False
print("--------")
c = int(c)
print(c) # 1
print(type(c)) # <class 'int'> bool --> int
5.运算符
-
算术运算符
- +、-、*、/
- %、**(幂运算)、//(整除)
-
赋值运算符
- =
- +=、-=、*=、/=、*=、**=、%=、//=
-
注意,在python中没有 i++,i–等
-
比较运算符
- >、<、==
- >=、<=、!=
-
成员运算符
- in
- not in
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
- 逻辑运算符
- and
- or
- not
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 |
or | x or y | 布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
- 身份运算符
- is
- is not
身份运算符用于比较两个对象的存储单元
运算符 | 描述 | 实例 |
---|---|---|
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
注: id() 函数用于获取对象内存地址
- 位运算(了解)
- & 、|、 ^
- ~、<<、>>
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
a = 10
b = 10.1
c = "你好"
bool = True
print(a + b) # 20.1
# print(a + c) # TypeError
print(a+bool) # 11 True 会自动转换成 1 False 会自动转换成0
- 当不同类型的数据进行运算时,解释器会自动向高级别的类型进行转型,如果无法转为同一类型的会报TypeError
str = "*"
print(str * 100) # 会打印出100颗星
- 如果int类型跟一个字符串做乘法,解释器会认为重复该字符n次
a = 10
b = 20
print(a > b) # False 比较运算后会得到一个bool类型值
list = [0, 2, 4, 8]
print(a in list) # False 成员运算符也是会得到一个bool类型数值
print(a is 10) # True 身份运算符也是获得一个bool类型值
- 逻辑运算解析
a = 10
b = 20
c = 30
print(a < b or c < b) # True or 相当于Java中的 ||
print(a < b and c < b) # False and 相当于 &&
print(not a < b) # False not 取反
- ** 、 //
a = 10
b = 3
print(a ** b) # 1000 // 幂运算 10^3
print(a // b) # 3 整除,相当于取整数部分
print(a % b) # 1 取余数部分
Python运算符优先级
以下表格列出了从最高到最低优先级的所有运算符:(可以通过括号改变优先级,无序记忆)
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |