python之路:进阶篇

一、作用域
在Python 2.0及之前的版本中,Python只支持3种作用域,即局部作用域,全局作用域,内置作用域;在Python 2.2中,Python正式引入了一种新的作用域 --- 嵌套作用域;在Python 2.1中,嵌套作用域可以作为一个选项被开启;嵌套作用域的引入,本质上为Python实现了对闭包的支持,关于闭包的知识,网上有很多解释,这里就不详细展开了。相应地,变量查找顺序由之前的LGB变成LEGB(L:Local,E:Enclosing,G:Global,B:Built-in)。

在Python中,并不是任何代码块都能引入新的作用域,这与C有很大的不同:

#include<stdio.h>
int main() {
    if(2 > 0) {
        int i = 0;
    }
    printf("i = %d", i);
    return 0;
}

 在这段代码中,if子句引入了一个局部作用域,变量i就存在于这个局部作用域中,但对外不可见,因此,接下来在printf函数中对变量i的引用会引发编译错误。

if True:
    i = 0
print i

 在这段代码中,if子句并没有引入一个局部作用域,变量i仍然处在全局作用域中,因此,变量i对于接下来的print语句是可见的。

实际上,在Python中,只有模块,类以及函数才会引入新的作用域,其它的代码块是不会引入新的作用域的。
  在Python中,名字绑定在所属作用域中引入新的变量,同时绑定到一个对象。名字绑定发生在以下几种情况之下:
    1.参数声明:参数声明在函数的局部作用域中引入新的变量;
    2.赋值操作:对一个变量进行初次赋值会在当前作用域中引入新的变量,后续赋值操作则会重新绑定该变量;
    3.类和函数定义:类和函数定义将类名和函数名作为变量引入当前作用域,类体和函数体将形成另外一个作用域;
    4.import语句:import语句在当前作用域中引入新的变量,一般是在全局作用域;
    5.for语句:for语句在当前作用域中引入新的变量(循环变量);
    6.except语句:except语句在当前作用域中引入新的变量(异常对象)。
只要在内存里存在就可以使用

二、三元运算

Python对于类似C语言的三元条件表达式condition ? true_part : false_part,虽然Python没有三目运算符(?:),但也有类似的替代方案,那就是true_part if condition else false_part。

>>> 1 if True else 0  
1  
>>> 1 if False else 0  
0  
>>> "Fire" if True else "Water"  
'Fire'  
>>> "Fire" if False else "Water"  
'Water'

 使用and-or技巧,利用条件判断的优先特性来实现三元条件判断,比如P∧Q,在Python中如果P为假,那么Python将不会继续执行Q,而直接判定整个表达式为假(P值),当然如果P为真,那就还要继续执行Q来决定整个表达式值;同样的P∨Q,如果P为真,那么就不会继续执行Q了…

简化if判断:
name = 'ales'
#######################################################
if 1 == 1:
    name 'sb'
else:
    name '2b'
可以写成:
name = "sb" if 1 == 1 else "2b"    
name = 值1 if 条件 else 值2
#如果条件成立,输出值1,否则输出值2
>>> name = 'dog'
>>> name = "boy" if 1 == 1 else "gol"
>>> print name
boy
三、进制
    二进制,01
    八进制,01234567
    十进制,0123456789
    十六进制,0123456789ABCDE每种语言都有一个常用的进制,python常用的是十进制
四、python基础
通过type可以查看对象类型,dir(类型名) 查看类中提供的所有功能
help(类型名) 查看类中所有详细的功能名 help(类型名.功能名)查看类中某功能的详细

python的一切事物都是对象,对象基于类创建

>>> type(list)        #查看对象属于哪个类
<type 'type'>
##############################################################
>>> dir(list)            #查看类中有那些功能
['__add__''__class__''__contains__''__delattr__''__delitem__''__delsli
ce__''__doc__''__eq__''__format__''__ge__''__getattribute__''__getit
em__''__getslice__''__gt__''__hash__''__iadd__''__imul__''__init__',
 '__iter__''__le__''__len__''__lt__''__mul__''__ne__''__new__''__r
educe__''__reduce_ex__''__repr__''__reversed__''__rmul__''__setattr__'
'__setitem__''__setslice__''__sizeof__''__str__''__subclasshook__''a
ppend''count''extend''index''insert''pop''remove''reverse''sort'
]

  #带双下划线的叫内置方法,可能有多种执行方法,最少一种。不带双下划线的叫非内置

非内置执行方法
list.append()

内置方法执行方式:

>>> n1 = -9
>>> abs(n1)
9
>>> n1.__abs__()
9
>>> help(list)   #查看类中所有详细的功能
>>> help(list.append)    #查看类中某功能的详细信息
Help on method_descriptor:
append(...)
    L.append(object) -- append object to end
Python列表函数&方法

python包含以下函数:

序号函数
1cmp(list1, list2)
比较两个列表的元素
2len(list)
列表元素个数
3max(list)
返回列表元素最大值
4min(list)
返回列表元素最小值
5list(seq)
将元组转换为列表

python包含以下方法:

序号方法
1list.append(obj)
在列表末尾添加新的对象
2list.count(obj)
统计某个元素在列表中出现的次数
3list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
5list.insert(index, obj)
将对象插入列表
6list.pop(obj=list[-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7list.remove(obj)
移除列表中某个值的第一个匹配项
8list.reverse()
反向列表中元素
9list.sort([func])
对原列表进行排序
Python支持四种不同的数值类型:

整型(int)-通常被称为是整型或整数,是正或负整数,不带小数点。

长整型(long integers)~无限大小的整数,整数最后是一个大写或小写的L

浮点型(floating point real values)=浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)

复数(complex numbers)- 复数的虚部以字母J或j结尾,如:2+3j

intlongfloatcomplex
1051924361L0.03.14j
100-0x19323L15.2045.j
-7860122L-21.99.322e-36j
0800xDEFABCECBDAECBFBAEl32.3+e18.876j
-0490535633629843L-90.-.6545+0J
-0x260-052318172735L-32.54e1003e+26J
0x69-4721885298529L70.2-E124.53e-7j

长整型也可以使用小写“L”,但是还是建议您使用大写“L”,避免与数字“1”混淆。python使用“L”来显示长整型。

python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者comples(a, b)表示,复数的实部a和虚部b都是浮点型

python数字类型转换
int(x [,base ])         将x转换为一个整数  long(x [,base ])        将x转换为一个长整数  float(x )               将x转换到一个浮点数  
complex(real [,imag ])  创建一个复数  
str(x )                 将对象 x 转换为字符串  
repr(x )                将对象 x 转换为表达式字符串  eval(str )              用来计算在字符串中的有效Python表达式,并返回一个对象  
tuple(s )               将序列 s 转换为一个元组  
list(s )                将序列 s 转换为一个列表  
chr(x )                 将一个整数转换为一个字符  
unichr(x )              将一个整数转换为Unicode字符  
ord(x )                 将一个字符转换为它的整数值  
hex(x )                 将一个整数转换为一个十六进制字符串  
oct(x )                 将一个整数转换为一个八进制字符串
python数学函数

函数返回值 ( 描述 )
abs(x)返回数字的绝对值,如abs(-10) 返回 10
ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y)如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x)返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4
log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,...)返回给定参数的最大值,参数可以为序列。
min(x1, x2,...)返回给定参数的最小值,参数可以为序列。
modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y)x**y 运算后的值。
round(x [,n])返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x)返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j

Python随机函数

随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性,

python包含以下常用随机数函数:

函数描述
choice(seq)从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
randrange ([start,] stop [,step])从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1
random()随机生成下一个实数,它在[0,1)范围内。
seed([x])改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
shuffle(lst)将序列的所有元素随机排序
uniform(x, y)随机生成下一个实数,它在[x,y]范围内。
Python三角函数

python包括以下三角函数:

函数描述
acos(x)返回x的反余弦弧度值。
asin(x)返回x的反正弦弧度值。
atan(x)返回x的反正切弧度值。
atan2(y, x)返回给定的 X 及 Y 坐标值的反正切值。
cos(x)返回x的弧度的余弦值。
hypot(x, y)返回欧几里德范数 sqrt(x*x + y*y)。
sin(x)返回的x弧度的正弦值。
tan(x)返回x弧度的正切值。
degrees(x)将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
radians(x)将角度转换为弧度
 Python数学常量

常量描述
pi数学常量 pi(圆周率,一般以π来表示)
e数学常量 e,e即自然常数(自然常数)。

Python 字符串

 符   号描述
         %c 格式化字符及其ASCII码
      %s 格式化字符串
      %d 格式化整数
      %u 格式化无符号整型
      %o 格式化无符号八进制数
      %x 格式化无符号十六进制数
      %X 格式化无符号十六进制数(大写)
          %f 格式化浮点数字,可指定小数点后的精度
          %e 用科学计数法格式化浮点数
         %E 作用同%e,用科学计数法格式化浮点数
      %g %f和%e的简写
         %G %f 和 %E 的简写
      %p 用十六进制数格式化变量的地址
元组元算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算,这就意味着他们可以组合和赋值,运算后生成一个新的元组。

Python 表达式结果描述
len((1, 2, 3))3计算元素个数
(1, 2, 3) + (4, 5, 6)(1, 2, 3, 4, 5, 6)连接
['Hi!'] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']复制
3 in (1, 2, 3)True元素是否存在
for x in (1, 2, 3): print x,1 2 3迭代

元组的元素不能修改,元组的元素的元素可以修改

元组索引、截取

Python 表达式结果描述
L[2]'Hello'读取第三个元素
L[-2]'Hello'反向读取;读取倒数第二个元素
L[1:]('Hello', 'world')截取元素
元组内置函数

python元组包含了以下内置函数

序号方法及描述
1cmp(tuple1, tuple2)
比较两个元组元素。
2len(tuple)
计算元组元素个数。
3max(tuple)
返回元组中元素最大值。
4min(tuple)
返回元组中元素最小值。
5tuple(seq)
将列表转换为元组。
字典内置函数&方法

python字典包含了以下内置函数:

序号函数及描述
1cmp(dict1, dict2)
比较两个字典元素。
2len(dict)
计算字典元素个数,即键的总数。
3str(dict)
输出字典可打印的字符串表示。
4type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。

python字典包含了以下内置函数:

序号函数及描述
1radiansdict.clear()
删除字典内所有元素
2radiansdict.copy()
返回一个字典的浅复制
3radiansdict.fromkeys()
创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4radiansdict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
5radiansdict.has_key(key)
如果键在字典dict里返回true,否则返回false
6radiansdict.items()
以列表返回可遍历的(键, 值) 元组数组
7radiansdict.keys()
以列表返回一个字典所有的键
8radiansdict.setdefault(key, default=None)
和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default
9radiansdict.update(dict2)
把字典dict2的键/值对更新到dict里
10radiansdict.values()
以列表返回字典中的所有值

 

posted @ 2015-12-08 17:36  吴老二  阅读(855)  评论(0编辑  收藏  举报