概述
1 Overview
1.1 编程语言基础问题:
-
源码文件字符编码:是否为 utf-8, unicode
-
标识符:名称风格,驼峰,蛇形,能否包含$,@等特殊符号
-
变量声明:通过类型(java/c/c++/c#),var/val(js/go/c#),or 无需声明(python)
-
函数声明:def(python/ruby),function(js),func(go), sub(perl),proc,or 其他(java/c/c++)
-
关键字:影响语言的表现力
-
注释:单行,多行
-
语句结束符: 是否必须以 ‘;’ 结束!
-
代码块风格:缩进 or {}, 首行以关键字开始,以 : 结束
-
多行 :语句较长时,怎样方便的折行
-
数字
- 类型
- 运算符
- 原生函数
- 随机数
-
字符串
- 字符形式
- 字符串形式: 单引号,双引号,三引号(c# 使用 ###)
- 转义 与 去转义: ‘’, r"this is a line with n"
- 运算符: +, *, slice,[]
- mutable or immutable
-
空行 : pass
-
System IO:print,input,换行与不换行
-
模块导入: import,include,require,from … import, import … as
-
包:包是程序、模块、库或文件的集合,如 rpm, jar,war,lib, so, gem, …
1.2 基本数据类型
在 python 中,变量就是变量,没有类型,而所谓的“类型”是指变量所指向的内存中对象的类型。
hello = "hello"
a = b = c = 1
x, y, z = 3, 4, 5
1.3 六种标准的数据结构
1 Number(immutable): int(大小不限), float, bool, complex
-
类型: int,float, complex, bool
-
运算符: +, -, *, /, //, %, **
-
原生函数
-
随机数
-
不可变,意味着,如果改变变量的值,则会分配新的内存空间
-
整型无大小限制:
a = 1 id(a) == id(1) # True a += 1 id(a) == id(2) # True a = 1231231234123412341234123412341234123412 b = a + 1 id(1) id(2) id(a)
数学函数
abs, fabs
ceil, floor
cmp, max, min, modf, round,
exp, log, log10, pow, sqrt,
随机数
choice
randrange
random
seed
shuffle
uniform
三角函数
sin, asin
cos, acos
tan, atan
hypot
degrees
radians
数学常量
pi
e
import math
import random
math.pi
math.e
2 String(immutable):
- 没有单独的字符类型
- 运算符: +, *, [], [:]
- in, not in : 字符串中是否包含特定字符/子字符串
- 格式化:通过 % 连接格式化字符串和参数 如, print(“I’m %s, %d years old!” % (‘AA’, 18))
- 三引号: 三引号让程序员从引号和特殊字符的泥潭中解脱出来,例如,当需要HTML或者SQL时,会十分的简洁且高效!
- python3 所有字符串都是 Unicode 字符串
内建函数
capitalize
center
count
bytes.decode(encoding=“utf-8”, errors=“strict”)
encode
endswith, startswith
expandtabs
find, index, replace, rfind, rindex,
isalnum, isalpha, isdigit, islower, isnumeric, isspace, istitle, issupper
join, split, splitlines
len
ljust, rjust,
lower
lstrip, rstrip, strip
maketrans
swapcase
title
translate
upper
zfill
isdecimal
str.format()
3 Tuple(immutable):
- 可以简单的理解为 immutable list: (“aaa”, “bbb”, “ccc”)
- 字符串可以看做特殊的元组
- 广义上: string, list, tuple 都属于 sequence(序列),
4 List(mutable):
- 列表中的元素类型可以不同: [1, 2, 3, ‘abc’, [4, 5]]
- [], [:] : 支持索引和切片, 可以通过 + 拼接
- 列表内容可变更
- 修改列表元素: a[1] = 2
- 删除列表元素: del a[1]
- 列表推导式: [ 3*x for x in seq], 与 map 的作用类似,是简化版的 map
内置列表函数
- len(list), max(list), min(list)
- list(tuple) : 将元组转换为列表
列表方法
- count, index, sort,
- append,extend, insert, copy
- pop, remove, clear
- copy
5 Set(mutable):
- 无序、不重复的元素的集合: { “aaa”, “bbb”, “ccc”} or set()
- 创建空集合不能使用 {}, 必须用 set(), 因为 {} 特指空字典
- 运算: 差(-),并(|),交(&),非交(^)
集合方法
- add : 如果已存在,不进行任何操作
- update : 添加元素,参数可以是列表,元组,字典等
- remove :如果元素不存在,会发生错误
- discard : 如果元素不存在,不会发生错误
- pop : 随机删除集合中的一个元素
- clear
6 Dictionary(mutable):
- 字典是一个无序、key:value 键值对集合: {‘name’: ‘hello’, ‘age’: 18}
- key 必须使用不可变类型,且在字典中唯一
- dict.keys() : 输出所有 key
- dict.values(): 输出所有 value
- dict.clear()
- 构建形式
a = dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)]) b = {x: x**2 for x in (2, 4, 6)} c = dict(Runoob=1, Google=2, Taobao=3)
字典方法
- clear
- copy
- fromkeys
- get, items, keys, values, setdefault, update, pop, popitem
1.4 类型转换
-
int(x [,base]): 将x转换为一个整数
int("1000", 2) # 8 = 2^3 int("1000", 8) # 512 = 8 ^3 int("1000", 10) # 1000 = 8 ^3 int("1000", 16) # 4096 = 8 ^3
-
float(x):将x转换到一个浮点数, float(“3.1”)
-
complex(real [,imag]): 创建一个复数
-
str(x):将对象 x 转换为字符串
a = dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)]) str(a) # "{'Taobao': 3, 'Runoob': 1, 'Google': 2}"
-
repr(x): 将对象 x 转换为表达式字符串
-
eval(str): 用来计算在字符串中的有效Python表达式,并返回一个对象
-
tuple(s): 将序列 s 转换为一个元组
-
list(s): 将序列 s 转换为一个列表
-
set(s): 转换为可变集合
-
dict(d): 创建一个字典。d 必须是一个序列 (key,value)元组。
-
frozenset(s): 转换为不可变集合
-
chr(x): 将一个整数转换为一个字符
-
ord(x): 将一个字符转换为它的整数值
-
hex(x): 将一个整数转换为一个十六进制字符串
-
oct(x): 将一个整数转换为一个八进制字符串
1.5 解释器
Python 解释器不止一种,有 CPython, IPython, Jython, PyPy
- CPython: 用 c 语言开发,是官方标准实现,拥有良好的生态,应用最为广泛
- IPython: 在 CPython 基础上,增强了交互式能力的解释器
- Jython: 可以把Python代码编译成 Java 字节码
- PyPy:
1.6 运算符
- 算术运算符: + - * / // % **
- 比较(关系)运算符: == != > < >= <=
- 赋值运算符: = += -= …
- 逻辑运算符: and, or, not
- 位运算符: &, |, ^, ~, >>, <<
- 成员运算符: in, not in
- 身份运算符: is, is not, 判断连个变量是否引用了同一个对象
a = ["a", "b", "c"] b = ["a", "b", "c"] a == b # True a is b # False
- 运算符优先级
python 保留字: 大小写敏感
- False : False == 0
- None
- True : True == 1
- and
- as
- assert
- break
- class
- continue
- def
- del
- elif
- else
- except
- finally
- for
- from
- global
- if
- import
- in
- is
- lambda
- nonlocal
- not
- or
- pass : 空语句,为了保持程序结构的完整性!
- raise
- return
- try
- while
- with
- yield
重要的内置方法
- type(): 用来查询变量所指的对象类型
- isinstance(): 将子类型也作为一种父类类型
- id(): 获取对象内存地址
- range() : 生成数列
range(5) range(5, 9) range(0, 10, 3) list(range(5)) # 根据 range 生成 list
- dir():显示一个模块里定义的所有模块、变量和函数。
- globals():
- locals():
- reload():
- staticmethod(): 设置函数为类的静态方法
- all(), any(), some:
- enumerate():
- vars(): 返回对象 object 的属性和属性值得字典对象
- exec(): 执行存储在字符串或文件中的Python语句,
1.2 注释
单行: #
多行: ‘’’ 或者 “”"
2 python 编程
2.1 斐波那契数列
#!/usr/bin/python3
# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 10:
print(b)
a, b = b, a+b
要正确理解 a,b = b, a+b 语句的运算逻辑!!!
2.2 迭代器与生成器
迭代器
- 迭代器会记住正在遍历的元素在集合中的位置信息,迭代器对象从集合第一个元素开始访问,直到所有元素被访问结束,只能往前不能后退。
- 两个基本方法:iter(), next()
- 字符串, 列表, 元组对象都可用于创建迭代器。
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
生成器
- 在Python中,使用了 yield 的函数被称为生成器(generator).
- 生成器是一个返回迭代器的函数,只能用于迭代操作;
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 值,并在下一次执行 next() 方法时,从当前位置继续执行。
总结: 生成器是一个函数,生成器返回迭代器。
2.3 函数
- 文档字符串:用于存放函数说明;
- 冒号: 函数内容以冒号起始;
- return: return 表达式指定返回值,没有 return 则返回 None;
- 参数匹配 :默认情况下,参数值和参数名称是按函数声明中定义的顺序来匹配的
- 参数传递 : 可变类型与不可变类型作为参数时的不同, 不可变类型可以简单理解为值传递,而可变类型为引用传递
- 参数类型 : 必须参数,关键字参数(命名参数),默认参数(调用时可省略),不定长参数(放在最后 *vargs ),字典参数(**vargs)
python 的函数参数形式非常的丰富,自由,强大,结合具体的例子,也比较容易理解。
匿名函数
python 使用 lambda 表达式来创建匿名函数,不使用 def。
lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数。
sum = lambda arg1, arg2: arg1 + arg2
print(sum(1, 2))
变量作用域
- L (Local): 局部作用域
- E (Enclosing):闭包函数外的函数中
- G (Global): 全局作用域
- B (Built-in):内建作用域
变量查找顺序: L > E > G > B
特别注意:
Python 只有 module, class, def, lambda 才会引入新的作用域,其他的代码块如 if/elif/else/, try/except, for/while 是不会引入新的作用域的, 与之相比,Java/C/C++ 是块作用域。
在内部作用域使用外部作用域中的变量时,需要用到 global(使用全局作用域中的变量), nonlocal(使用闭包中的变量)。可以跟 JS 对比着来理解。
因为 python 变量声明不需要任何特殊的关键字,所以默认情况下作用域内的变量都是局部变量,若要引用外部作用域的变量,需要使用 global 或 nonlocal。JavaScript 在变量声明时,需要使用 var 关键字,如果不是 var,则将视作全局变量。c 需要用 extern 来指示某变量为外部变量。Java 没有全局变量。
如果没有在访问前声明一个局部变量,会出现一个 UnboundLocalError。
2.4 模块
-
模块就是一个 .py 文件,模块包含所有定义的函数和变量
-
搜索路径:
- 当前目录
- shell 变量 PYTHONPATH 下的目录:目录列表,语法和 shell 变量的 PATH 一样
- 默认路径: Unix 下,默认路径为 /usr/local/lib/python/
- 可以通过 system 模块的 sys.path 来查看所有路径
2.5 包
- 包是一个分层次的文件目录结构,它定义了一个有模块及子包,以及子包下的子包等组成的 Python 的应用环境。
- 包本质上就是一个文件夹,该文件夹下必须存在 init.py 文件
2.6 异常处理
捕获异常可以使用 try/except/finally/else 语句;
通过 raise 来触发异常;
3 Library 库
- collections
- math
- sys
3.1 文件IO
- input : 可以接受一个 python 表达式,并将运算结果返回
- raw_input
- open
4 高级编程
- 面向对象
- 正则表达式
- CGI编程
- MySQL
- 网络编程
- SMTP
- 多线程
- XML解析
- GUI编程
- JSON
- Web
最后
以上就是爱笑酒窝为你收集整理的【编程语言】Python 从菜鸟到高手1 Overview2 python 编程3 Library 库4 高级编程的全部内容,希望文章能够帮你解决【编程语言】Python 从菜鸟到高手1 Overview2 python 编程3 Library 库4 高级编程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复