python基础

简介: python基础

python基础

基础

一、概述

Python 定义

Python 是一种解释型、动态、面向对象的编程语言

解释型

Python 是一门解释型语言,即在运行之前不需要编译(其他解释型语言 PHP 和 Ruby)


一般编程都是用高级语言,但计算机只能理解机器语言,所以需要把高级语言翻译成机器语言。翻译的方式有两种,一种是编译,一种是解释。两种方式只是翻译的时间不同。编译型语言只需要要翻译一次,运行时不需要翻译。而解释型语言在运行的时候才翻译


C 语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而 Python 适合用来编写应用程序,Python 源码文件在被导入时完成编译。编译后的字节码被缓存复用,通常会被缓存到磁盘,Python3 使用专门目录保存字节码缓存文件


动态

动态语言:在运行时确定数据类型的语言,使用变量之前不需要类型声明

静态语言:在编译时即确定变量的数据类型,在使用变量之前必须声明类型


Python 同时也是一门强类型语言,动态还是静态指的是编译期还是运行期确定类型,强类型指的是不会发生隐式类型转换。JS 和 PHP 是弱类型语言,如 JS 中可以运行 1 + '1' 不报错


面向对象

面向对象是一种程序设计思想,把对象作为程序的基本单元,一个对象包含了数据、属性和操作数据的方法。面向对象有三个基本特征:封装、继承、多态


优缺点

优点:

语法简洁优雅,易学

开发效率高,常适合做快速的原型开发

隐藏底层细节,比如内存管理

丰富的 API,第三方库

胶水语言,连接软件组件

各个领域都有建树


缺点:

运行速度慢,无法和编译的语言比,但可以通过使用 C/C++ 写 Python 扩展等方式优化

GIL 问题

Python2/3 兼容问题


结构

Python 语言以统一的方式支持面向对象的程序设计。程序里定义和操作的各种实体都是对象。一个对象可以具有一些行为能力,通过方法,可以执行这些行为,行为可以操作对象内部的状态

Python 的基本程序单位是命令(语句),表达式是命令的组成部分,最基本的命令为赋值

为处理多个命令,提供了一套控制结构

随着程序的复杂,引入一种为函数的基本抽象机制

进而封装成类,模块,包


二:表达式

布尔值

布尔运算是计算机进行流程控制的基础,在 Python 中,布尔值用 True 和 False 表示。常见的为 False 值: None, '', (), [], {}, 0  

By default, an object is considered true unless its class defines either a bool() method that returns False or a len() method that returns zero, when called with the object. 


运算符

比较运算符

常见比较运算符有 -、+、*、+=、-=、*=、<、<=、>=、>、==、!=、^、|、&、in。每个运算符其实都是对象的魔法方法,当同时存在多个比较运算符时,会依据优先级进行运算  

# 字符串与数值之间不能直接进行运算, 需要类型转换
In : 6 + '4'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
In : 6 + int('4')
Out: 10
# 使用 type() 函数可以用来查看是操作对象什么类型
In : type(6), type('4')
Out: (int, str)

Python运算符优先级

逻辑运算符

逻辑运算符有三种,分别为 or, and, not,即或、与、非。三个逻辑运算符中,not 的优先级最高,但低于比较运算符,or 的优先级最低,and 位于两者之间。当逻辑运算符不止一个时,使用短路逻辑,逻辑运算一旦短路,立即终止计算

从左至右,若 or 的左侧逻辑值为 True,则短路 or 后所有的表达式(不管是 and 还是 or)

从左至右,若 and 的左侧逻辑值为 False,则短路其后所有 and 表达式,直到有 or 出现

若 or 的左侧为 False,或者 and 的左侧为 True 则不能使用短路逻辑

In : 3 and 5, [] and 6
Out: (5, [])
In : [] or 8, 3 or 5
Out: (8, 3)
In : 0 and 0 and 1 and 0 and 1
Out: 0
In : 1 or 0 or 1 or 0 or 1
Out: 1
In : 0 and 0 and 1 and 0 or 1 and 1 or 0 and 1
Out: 1 

python 中 and 和 or 运算的核心思想

条件表达式

[on true] if [expression] else [on false]
In : 'T' if 2 > 1 else 'F'
Out: 'T'


三:命令

最基本的命令为赋值


四:流程控制  

控制流指一系列按顺序执行的指令


控制结构

简单控制结构:

if…else:分支结构

for:循环结构

while:循环结构

break:打破循环

continue:结束当前循环

range:等差数列

pass:跳过


复杂控制结构:

可迭代对象、迭代器、生成器

上下文管理器

协程

asyncio


for 与 while

for 循环用于迭代固定数量的元素,按给定(正或负)增量进行迭代

while 执行逻辑循环,只要保持条件为真,就可以执行无限次迭代,使用 While 循环时,必须显式指定计数器以跟踪循环执行的次数


与 for 相比,while 效率低,因为 while 在每次迭代后检查条件是否为 True,当然使用 while 可以编写更为灵活的表达式  复制成功,转载请保留本站链接: www.chenjiao.cloud

In : timeit('i = 0\nwhile i < 100: i += 1')
Out: 5.91581211599987
In : timeit('for i in range(100): pass')
Out: 1.9179262340185232 

与 else 结合使用

for … else … 指当循环自然结束而不是被 break 打破时执行 else 字句

while … else … 在循环条件为 false 时执行 else 语句块


五:内置类型

Python 的内置类型

The principal built-in types are numerics, sequences, mappings, classes, instances and exceptions

Python 的内置类型被编译器和解释器特别对待,比如核心级别的指令和性能优化,专门设计的高效缓存等等

内置类型可分为数字,序列,映射和集合几类。另根据其实例是否可被修改,又有可变(mutable)和不可变(immutable)的区分


类型

举例

number

int(N), float(N)

sequence

str(N), bytes(N), bytearray(Y), list(Y), tuple(N)

mapping

dict(Y)

set

set(Y), frozenset(N)


内置函数 issubclass 检查一个类是否是另一个类的子类;标准库 collections.abc 列出了相关类型的抽象基类  复制成功,转载请保留本站链接: www.chenjiao.cloud

In : from collections import abc
In : issubclass(str, abc.Sequence)
Out: True
In : issubclass(dict, (abc.Mapping, abc.MutableMapping))
Out: True 

可变与不可变对象

Python 中根据对象是否可被修改,可分为可变与不可变对象

不可变对象:该对象所指向内存中的值不能被改变。包括数字、字符串、元组

可变对象:在改变对象的值时,内存地址不会发生改变。包括列表、字典、集合

In : a = 5
In : id(a)
Out: 4518805664
In : a += 5    ## 不可变数据类型,赋值时开辟新对象,重新引用
In : id(a)
Out: 4518805824
In : l = [1, 2, 3]
In : id(l), id(l[0])
Out: (4578866696, 4544630816)
In : l[0] = 4
In : id(l), id(l[0])

其他数据结构

Python标准库内置的collections模块提供了更多的选择。详见 collections

namedtuple():用于创建元组子类的工厂函数(factory function),可以通过属性名来访问它的元索引

deque:双端队列,类似列表,是栈和队列的一般化,可以在两端快速添加或取出元素

ChainMap:类似字典的类,用于创建多个映射的单一视图

Counter:字典子类,由于对可哈希对象进行计数

OrderedDict:字典子类,可以保存元素的添加顺序

defaultdict:字典子类,可以通过调用用户自定义的工厂函数来设置缺失值



使用

序列索引

Python 序列的索引采用从 0 开始即使用 0-based 的索引方式?

半开区间切片和缺省匹配区间切片语法变得非常漂亮:a[:n] 和 a[i:i+n]

当只有最后一个位置信息时,可以快速看出切片和区间里有几个元素:range(3) 和 my_list[:3] 都返回 3 个元素

当起止位置信息都可见时,可以快速计算出切片和区间的长度,用后一个数减去第一个下标(stop - start) 即可

半开区间两个切片操作位置邻接时,第一个切片操作的终点索引值是第二个切片的起点索引值。将数组以 i,j 两个点切成三部分为 a[:i],a[i:j] 和 a[j:]


文章 “Why Numbering Should Start atZero”解释了为什么 ABCED[1:3] 的结果应该是 BC 而不是 BCD,以及为什么 2,3,…,12 应该写作 range(2, 13)


序列解包

对于任意序列类型(包括字符串和字节序列),只要赋值运算符左边的变量数目与序列中的元素数目相等,则都可以将元素序列解包到另一组变量中

In : a, b, *c = 0, 1, 2, 3
In : a, b, *c
Out: (0, 1, 2, 3)
In : a, b, *c = 0, 1, 2, 3
In : a, b, c
Out: (0, 1, [2, 3])
In : a, *b, c = 0, 1, 2, 3
In : a, b, c
Out: (0, [1, 2], 3)
In : (a, b), (c, d) = (1, 2), (3, 4)
In : a, b, c, d
Out: (1, 2, 3, 4)

内置函数

内置类型

表达式

collections.abc 官方文档

More Control Flow Tools

摘自朋友Haoyu blog  

目录
相关文章
|
Python
python基础 3
python基础
|
存储 数据安全/隐私保护 Python
python基础 2
python基础
|
存储 Java 开发者
Python基础回顾(上)
Python基础回顾(上)
72 0
|
程序员 索引 Python
python基础—图形开发(下)
python基础—图形开发
164 0
|
Python
Python基础(8)
Python基础(8)
127 0
Python基础(8)
|
Python
Python基础(5)
Python基础(5)
133 0
|
Python
Python基础(10)
Python基础(10)
114 0
|
程序员 开发者 Python
Python基础(6)
Python基础(6)
93 0
|
Java 数据安全/隐私保护 Python
Python - 基础篇(下)
Python - 基础篇(下)
120 0
Python - 基础篇(下)
|
Python
python——基础练习(二)
python——基础练习(二)
131 0
python——基础练习(二)