python基础知识纵览(中)

python语句语法

程序块与作用域

  • 相同缩进范围的代码在一个程序块和作用域中
  • 同一个程序块和作用域中不能有不同的缩进
#!/usr/bin/env python       ## 脚本设置env启动,env可以在系统的PATH查找
# -*- coding: UTF-8 -*-     ## 设置当前python的字符编码

def fn():
    print("python3.0")      ## python3.0 的打印输出
    print "python2.7"       ## python2.7 的打印输出

每个使用冒号":"标记的程序块内的代码必须有相同的描述

判断语句

a = 9
b = 4
c = None

## 第一种形式
if not c:       ## c不是None的时候执行if下的语句
    pass        ## 表示需要写代码但是实际什么也不做的场合        

if a > b:
    pass

if c is None:
    pass
    
## 第二种形式
if a > b:
    print("a > b")     ## python3.x的打印
else:
    print("a <= b")    

## 第三种形式
if a >= 10:
    print("a > 10")
elif 5 < a < 10:        ## ==> a > 5 and a < 10
    print("5 < a < 10")
else:
    print("a <= 5")
    
## 第四种形式
a = 9
b = 2
num = a if a > 10 else b        ##num is b 

循环语句

  • while 循环
## 基本格式
while test:
    statement1
else:
    statement2

## 例子
children = ["tom","keithl","jane","mani","bob"]

while len(children) > 0:
    print "pop the child[%s]" % children.pop()
else:
    print("there have not any ele in chidlren ...")

pop the child[bob]
pop the child[mani]
pop the child[jane]
pop the child[keithl]
pop the child[tom]
  • for 循环
## 基本格式
for target in object: 
    statements
else:
    statements

## 示例
>>> for x in ["spam", "eggs", "ham"]: 
... print(x, end=' ')
...
spam eggs ham

## 遍历带有元组信息的列表
>>> T = [(1, 2), (3, 4), (5, 6)]
>>> for (a, b) in T: # Tuple assignment at work
...     print(a,b)
... 
1 2 
3 4 
5 6

## 遍历字典
D = {'a': 1, 'b': 2, 'c': 3}
## 遍历字典方法1
for key in D:
    print(key, '=>', D[key])

## 遍历字典方法2
for (key, value) in D.items():
    print(key, '=>', value)
    
## 使用python3.x遍历并序列解压
for (a, *b, c) in [(1, 2, 3, 4), (5, 6, 7, 8)]:
    print(a, b, c)

赋值语句

  • 序列赋值语句
## 基本赋值
>>> num = 1
>>> wind = 9
>>> A,B = num,wind
>>> A,B
(1,9)

## 高级赋值
>>> str = "ABCD"
>>> a,b,c = str[0],str[1],str[2]
>>> a,b,c = list(str[:2]) + [str[2:]]
>>>(a,b),c = str[:2],str[2:]
>>> a,b,c = range(3)    ## 将三个变量名设置为整数0、1、2

## python3.x扩展序列解包
>>> seq = [1,2,3,4]
>>> a,*b = seq
>>> a
1
>>> b
[2,3,4]

>>> *a,b = seq
>>> a
[1,2,3]
>>> b
[4]

>>> a,*b,c = seq
>>> a
1
>>> b
[2,3]
>>> c
4

>>> a,b,*c = seq
>>> a
1 
>>> b
2
>>> c
[3,4]

总结:python3.x带""总是向其赋值一个列表,即使是匹配单个项,如果没有匹配会返回一个空的列表*

表达式语句

## 常用表达式
fn(args)            ## 函数调用
obj.call(args)      ## 对象方法调用
spam                ## 交互模式下打印变量
print(str)          ## python3.x打印操作
yiled x ** 2        ## 产生表达式语句

## 使用函数表达式并改变值
>>> L = [1,2,3]
>>> L.append(4)
>>> L
1,2,3,4

## python3.x之print函数打印格式
print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout][, flush=False])
sep:是在每个对象之间插入
end:在文本打印之后追加end的字符串信息
file:将信息输出到指定的终端,默认是sys.stdout,即控制台
flush:py3.3新增特性,即设置为True时立即将信息刷新到输出流的目的终端上而无须等待

## 示例
>>> print(x, y, z, sep=', ') 
spam, 99, ['eggs']

## 将信息输出到data.txt中
>>> print(x, y, z, sep='...', file=open('data.txt', 'w'))

## 兼容python2.x和python3.x的print函数,导入以下包
from __future__ import print_function

迭代器

如果对象是实际保存的序列,或者可以在迭代工具中for一次产生一个结果的对象则称为可迭代

## 基本迭代器
for x in [1, 2, 3, 4]: 
    print(x ** 2, end=' ')

## 文件迭代器
## 第一种方式
for line in open('script2.py'):
    print(line.upper(), end='')

## 第二种方式
for line in open('script2.py').readlines():
    print(line.upper(), end='')

## 第三种方式
f = open('script2.py')
while True:
    line = f.readline()
    if not line: break 
    print(line.upper(), end='')


## 手动设置迭代器iter和next
L = [1, 2, 3]
I = iter(L)
while True:
    try:
        X = next(I)
    except StopItration:
        break
    print(X ** 2,end=' ')

## 内建迭代器类型,字典
D = {'a':1, 'b':2, 'c':3}
for key in D.keys():
    print(key, D[key])
    
## 列表解析
x = [y + 10 for y in range(10)]

## 文件列表解析
lines = [line for line in open("data.txt")]

## 扩展的列表解析
lines = [line for line in open("data.txt") if line[0] == "k"]   ## for循环下带有if语句块
list = [x + y for x in range(10) for y in range(5)]             ## for循环嵌套for循环

python3.x新增迭代器

## range迭代器
>>> R = range(10)
>>> I = iter(R)
>>> next(I)     ## 每次调用next就会输出列表的下一个元素


## map迭代器:map(func, *iterables):接受一个函数和一个迭代器对象,将所有的迭代器对象经过函数处理得到一个新的迭代对象数据
num = map(abs,(-2,-3,-5,9,3))
for n in num:
    print(n,end=",")
2,3,5,9,3,

## zip迭代器:zip(iter1, iter2=None, *some):第一个参数必填,接受可以迭代的对象,并将每组对象的对应元素重新组成tuple
z = zip((1,2,3),(5,6,7))
for pair in z:
    print(pair)
(1, 5),(2, 6),(3, 7),

## filter迭代器:filter(filter_fn,*iterables):接受一个函数和一个迭代对象,将符合函数filter_fn要求的将返回迭代数据
list(filter(bool, ['spam', '', 'ni']))  < = > [x for x in ['spam', '', 'ni'] if bool(x)]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容