A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

17858527423

注册黑马

  • 黑马币:28

  • 帖子:9

  • 精华:0

© 17858527423 注册黑马   /  2019-3-30 22:16  /  1354 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 17858527423 于 2019-3-30 22:18 编辑

此贴为看书、学习过程中碰到的不太清楚的地方整合的笔记,不少是复制粘贴的。。。
1.关键字命名
1.1关键字(ipython3):
        import keyword
        print(keyword.kwlist)
1.2变量命名:
1.只能由下划线、数字和字母组成
2.不能以数字开头
3.不能与关键字同名
4.应尽量避免与引用到的函数或库同名
5.大驼峰命名法、小驼峰命名法、下划线命名法等

2.目前接触到的变量类型
2.1- Python 中数据类型可以分为 数字型 和 非数字型
- 数字型
                - 整型 (int)
                - 浮点型(float)
                - 布尔型(bool
                - 真 True 非 0 数 —— 非零即真
                - 假 False 0
- 复数型 (complex)
                 - 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题

- 非数字型
                  - 字符串  
- 列表
- 元组
- 字典

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

2.3取整:
int() 直接截取小数部分,(返回值为整数)
floor() 得到最接近原数但小于原数的整数(返回值)
round()得到最接近原数的整数,(返回值值为浮点数)
bool:
bar = True
print("%s" %bar)
>>>True
print("%d" %bar)
>>>1


3.列表
其实在 Python 中, 一切都是指针。
按照 Python 的法则, 你无法真正删除一个数值对象, 你仅仅是不再使用它而已。

3.1列表常用操作
In [1]: name_list.
name_list.append    name_list.insert    name_list.extend
name_list.count     name_list.index    name_list.copy  
name_list.reverse      name_list.sort
name_list.pop    name_list.remove    name_list.clear


3.2序列操作符:切片
正向索引时,索引值开始于 0,结束于总长度减 1(因为我们是从 0 开始索引的)
如果开始索引或者结束索引没有被指定,则分别以字符串的第一个和最后一个索引值为默认值。
反向索引操作时,是从-1 开始,向字符串的开始方向计数,到字符串长度的负数为索引的结束

3.3创建列表
>>> [ i * 2 for i in [8, -2, 5] ]
[16, -4, 10]
>>> [ i for i in range(8) if i % 2 == 0 ]
[0, 2, 4, 6]

# 切片产生了新的内存空间
a = [1,2,3]
b = a[:]
del(a[1])
print(a)
print(b)

# 没有带括号就没有产生新的内存空间
a = [1,2,3]
b = a
del(a[1])
print(a)
print(b)

3.4比较大小
1. 对两个列表的元素进行比较.
2. 如果比较的元素是同类型的,则比较其值,返回结果.
3. 如果两个元素不是同一种类型,则检查它们是否是数字.
a. 如果是数字,执行必要的数字强制类型转换,然后比较.
b. 如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的")
c. 否则,通过类型名字的字母顺序进行比较.
4. 如果有一个列表首先到达末尾,则另一个长一点的列表"大".
5. 如果我们用尽了两个列表的元素而且所有元素都是相等的,那么结果就是个平局,就是说返回一个 0.

堆栈:
堆栈是一个后进先出(LIFO)的数据结构
列表
队列是一种先进先出(FIFO)的数据类型,

4.元组
只有一个元素的元组需要在元组分割符里面加一个逗号(,),用以防止跟普通的分组操作符混淆;
元组对象本身是不可变的,但这并不意味着元组包含的可变对象也不可变

5.字典(键值对)
每个键只能对应一个项。也就是说,一键对应多个值是不允许的。(像列表、元组和其他字典这样的容器对象是可以的。)
当有键发生冲突(即,字典键重复赋值),取最后(最近)的赋值。
比较大小:(1)比较字典长度 (2)比较字典的键 (3)比较字典的值 (4) Exact Match
hash():只有这个对象是可哈希的,才可作为字典的键
元组中只包括像数字和字符串这样的不可变参数,才可以作为字典中有效键
值相等的数字表示相同的键

6.类型分类
数据类型 存储模型 更新模型 访问模型
数字 Scalar 不可更改 直接访问
字符串 Scalar 不可更改 顺序访问
列表 Container 可更改 顺序访问
元组 Container 不可更改 顺序访问
字典 Container 可更改 映射访问

6.2 id变化
在不改变id的情况下,内部的值 是可变的,如字典、列表

浅拷贝 发生改变,只拷贝存储空间
a = 1  b = a
深拷贝 存储空间和值都拷贝
用模块

输入id(257)时,每次得到的值应该是不一样的,有时候得到相同的结果是因为当电脑比较忙时,如果以前使用过,会读取使用过的内存空间;




7.条件表达式
x, y = 4, 3
>>>smaller = x if x < y else y
>>>smaller
3

8.1序列内建函数
sorted(),zip()  返回一个序列(列表)
reversed() 和 enumerate() 返回迭代器(类似序列)

8.2列表解析:
[expr for iter_var in iterable if cond_expr]
x = len([word for line in f for word in line.split()])
y = sum([len(word) for line in f for word in line.split()])

8.3生成器表达式:
(expr for iter_var in iterable if cond_expr)
读取文件最大行、生成器
print(max(len(x.strip()) for x in open("config-win.txt")))

8.4 lambda: 匿名函数(相当于函数的单行版本)
# def a(x,y=2) return x+y
a = lambda x, y=2:x+y

from random import randint as
print [n for n in [randint(1,99) for i in range(9)] if n%2]
8.5 map():
将函数调用“映射”到每个序列的元素上,
并返回一个含有所有返回值的列表。
>>map((lambda x: x+2),[0,1,2,3,4,5])
[2,3,4,5,6,7]
>>>map((lambda x,y: (x+y,x-y),[1,3,5],[2,4,6])
[(3,-1),(7,-1),(11,-1)]
>>>map(None,[1,3,5],[2,4,6])
[(1,2),(3,4),(5,6)]

8.6 zip()
>>>zip([1,3,5],[2,4,6])
[(1,2),(3,4),(5,6)]



[size=12.0000pt]9. 异常
9.1异常语句
try:
            pass
except exception1:
    pass
except exception2:
    pass
except exception as result:
    pass
else:
    pass
finally:
    pass

9.2异常名称 描述
BaseExceptiona  所有异常的基类
SystemExitb python解释器请求退出
KeyboardInterruptc 用户中断执行(通常是输入^C)
Exceptiond 常规错误的基类
StopIteratione 迭代器没有更多的值
GeneratorExita 生成器(generator)发生异常来通知退出
SystemExith Python 解释器请求退出
StandardErrorg 所有的内建标准异常的基类
ArithmeticErrord 所有数值计算错误的基类
FloatingPointErrord 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionErrord 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达 EOF 标记
EnvironmentErrord 操作系统错误的基类
IOError 输入/输出操作失败
OSErrord 操作系统错误
WindowsErrorh Windows 系统调用失败
ImportError 导入模块/对象失败
KeyboardInterruptf 用户中断执行(通常是输入^C)
LookupErrord 无效数据查询的基类
IndexError 序列中没有没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于 Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalErrorh 访问未初始化的本地变量
ReferenceErrore 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedErrord 尚未实现的方法
SyntaxError Python 语法错误
IndentationErrorg 缩进错误
TabErrorg Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeErrorh Unicode 相关的错误
UnicodeDecodeErrori Unicode 解码时的错误
UnicodeEncodeErrori Unicode 编码时错误


10.模块
与其它可以导入类(class)的语言不同,在 Python 中你导入的是模块或模块属性。

10.1模块名称空间
即使属性之间有名称冲突, 但它们的完整授权名称(fully qualified name)——通过句点属性标识指定了各自的名称空间 - 防止了名称冲突的发生。

10.2模块导入
只从模块导入名字的另一个副作用是那些名字会成为局部名称空间的一部分。 这可能导致覆盖一个已经存在的具有相同名字的对象。 而且对这些变量的改变只影响它的局部拷贝而不是所导入模块的原始名称空间。也就是说, 绑定只是局部的而不是整个名称空间。
############
# imptee.py #
#############
foo = 'abc'
def show():
print 'foo from imptee:', foo
#############
# impter.py #
#############
from imptee import foo, show
show()
foo = 123
print 'foo from impter:', foo
show()

运行这个导入者程序, 我们发现从被导入者的观点看, 它的 foo 变量没有改变, 即使 我们在 importer.py 里修改了它。
foo from imptee: abc
foo from impter: 123
foo from imptee: abc

唯一的解决办法是使用 import 和完整的标识符名称(句点属性标识)。
#############
# impter.py #
#############
import imptee
imptee.show()
imptee.foo = 123
print 'foo from impter:', imptee.foo
imptee.show()
完成相应修改后, 结果如下:
foo from imptee: abc
foo from impter: 123
foo from imptee: 123



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马