笔记|语句和语法(一)

Python笔记|语句和语法(一)


Python语句简介

python的语句

语句 角色 例子
赋值 创建引用值 a, b, c = ‘good’, ‘bad’, ‘ugly’
调用 执行函数 log.write(“spam, ham”)
if/elif/else/ 选择动作 if “python” in text : print(text)
for/else 序列迭代 for x in mylist: print(x)
while/else 一般循环 while x > y: print(‘hello’)
pass 空占位符 while True: pass
break 循环退出 while True: if exittest(): break
continue 循环继续 while True: if skiptest(): continue
def 函数和方法 def f(a, b, c = 1, *d): print(a+b+c+d[0])
return 函数结果 def f(a, b, c=1, *d): return a+b+c+d[0]
yield 生成器函数 def gen(n): for i in n: yield i*2

python允许使用分号来作为语句结束,但一般不用,一般只有一行挤进多个语句时使用。

a = 1; b = 2
print(a);
a = [1, 2, 3, 4];

一般为了实现跨行,用一对括号把语句括起来就行了。

a = (1, 2, 
    3, 4)
b = (1 + 2 
    + 3 + 4)
if ( 1 == 1 and
    2 == 2 and 
    3 == 3):
    print('hello')

一个老的规则也允许我们跨行,就是在语句后面加’’,但我们一般不使用这样的规则,因为它显得脆弱。

x = 1 + 2\
    + 3 + 4
print(x)

用try语句来处理错误

while True:
    a = input('Enter text: ')
    if a == 'stop':
        break
    try:
        num = int(a)
    except:
        print('Bad!'*4)
    else:
        print(int(a) ** 2)
print('Bye')

这里的else是跟着try的,而不是跟着if语句。


赋值、表达式和打印

1.赋值语句

赋值语句的特性如下:

  1. 赋值语句建立对象的引用值
  2. 变量名在首次赋值时会被创建
  3. 变量名在引用前必须先赋值
  4. 执行隐式赋值的一些操作

赋值语句形式

运算 解释
spam = ‘SPAM’ 基本形式
spam, bam = ‘SPAM’, ‘BAM’ 元组赋值运算
[spam, bam] = [‘SPAM’, ‘BAM’] 列表赋值运算
a, b, c, d = ‘spam’ 序列赋值运算
a, *b = ‘spam’ 扩展的序列解包
a = b = ‘spam’ 多目标赋值
spam += 4 增强赋值运算

序列赋值运算 在最新的python版本中,元组和列表赋值语句已经统一为序列赋值语句的实例,就是按对应位置赋值。

增强赋值运算 是在原来的对象上操作,而不是对象副本,可以更快操作。

扩展序列解包

一个带有单个星号的名称,可以在赋值目标中使用,以指定对于序列的一个更为通用的匹配————一个列表赋给了带星号的名称。

>>> a, *b = 1, 2, 3
>>> a, *b
(1, 2, 3)
>>> a, b
(1, [2, 3])        

而带星名称在中间时,会引用中间位置的对象形成的列表

>>> a, *b, c = 1, 2, 3, 4, 5
>>> a, b, c
(1, [2, 3, 4], 5)

下面是元组使用的注意事项:

>>> a = [1, 2]; b = [3, 4];
>>> t = (a, b)
>>> t[0][0] = 10
>>> a
[10, 2]

边界情况
如果没有多余的值,则带星号的名称引用空列表对象;而如果有多个带星号,则出错。

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

>>> *a, b, *c, d = 1, 2, 3, 4
  File "", line 1
SyntaxError: two starred expressions in assignment

>>> a, *b = 1,2
>>> b
[2]

多目标赋值语句

>>> a = b = c = 'spam'
>>> a, b, c
('spam', 'spam', 'spam')

如果把对象设为初始可变对象,则可能同步改变变量的引用值

>>> a = b = c = []
>>> a.append(1)
>>> a, b, c
([1], [1], [1])

增强赋值语句

X += Y
X *= Y
X &= Y
...

增强赋值语句的优点:

  1. 程序员减少输入
  2. 左侧只需计算一次。
  3. 自动优化
>>> L = [1, 2, 3]
>>> L += [5, 6]

这里L会自动调用extend()来优化,而不是L = L + [5, 6]这样执行两次操作。

2.变量命名规则

python3.0的保留字:

finally     is          lambda      nonlocal    global
assert      except      try         in          raise
yield       True        False       None

命名惯例

  1. 以单一下划线开头的变量名(_X)不会from module import * 语句导入。
  2. 前后有下划线的变量名(X)是系统定义的变量名,对解释器有特殊意义。
  3. 一两个下划线开头、但结尾没有两个下划线的变量名(__X)是类的本地变量。
  4. 只有一个下划线(_)的变量名会保存最后表达式的结果

3.打印操作

python3.x的print函数

print([object, ...][, sep' '][, end='\n'][, file=sys.stdout])

sep表示在每两个对象之间插入字符串默认为' 'end表示在句末增加字符串,默认为'\n'。而file指定发送到的文件、标准流或其他类似文件的对象。

>>> print('hello', end='')
hello>>> print()
>>> print(open('data').read())
hello world!LLLhi!    hello world!RRRhi!

if测试和语法规则

python的语法规则

  • **语句是逐个运行的,除非你不这样编写。**python一般都会按照次序从头到尾执行文件中嵌套块中的语句。
  • 块和语句的边界会自动检测。
  • **复合语句=首行+":" +缩进语句。**python中所有复合语句都遵循这种格式。缩进的语句称为块(有时叫做组)。
  • 空白行、空格以及注释通常都会忽略。
  • 文档字符(docastring)会被忽略掉。
>>> s = ('aaaa'
... 'bbbb'
... 'cccc')
>>> s
'aaaabbbbcccc'
>>> s = """aaaa
... bbbb
... cccc"""
>>> s
'aaaa\nbbbb\ncccc'

>>> print(s)
aaaa
bbbb
cccc

真值测试

  • 任何非零数字和非空对象都为真
  • 数字零、空对象以及特殊对象None都认作假
  • 比较和相等测试会递归地应用在数据结构中
  • 比较和相等会返回TrueFalse
  • andor会返回操作对象、FalseTrue
>>> if None:
...     print('None is True')
... else:
...     print('None is False')
...
None is False

空对象[]{}()False

>>> if []:
...     print('[] is True')
... else:
...     print('[] is False')
...
[] is False

and和or返回对象

>>> [] or {}
{}
>>> [] or 2
2
>>> () and 1
()
>>> {} and -0.1
{}

if/else三元表达式

>>> X = 1; Y = 2; Z = 3;
>>> A = Y if X else Z
>>> A
2
>>> X = 0
>>> A = Y if X else Z
>>> A
3

用于生成列表时

>>> [v if v % 2 == 0 else v+3 for v in [1, 2, 3]]
[4, 2, 6]

你可能感兴趣的:(Python)