zoukankan      html  css  js  c++  java
  • Python 快速入门笔记(5):语句

    本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处: https://www.cnblogs.com/itwhite/p/12297769.html

    简介

    python 中语句相关的一些基本常识:

    • python 中语句末尾不需要使用分号 “;”
    • if/while 等条件语句中条件表达式不需要小括号 “()”
    • python 中没有 switch/case 这类语句
    • print 语句在 python 2.6 以下版本不能使用括号,以后版本可以使用逗号分隔多个参数,打印时自动填充一个空格间隔

    赋值语句

    Python 支持多个变量同时赋值(又称为序列解包),例如:

    x, y, z = 1, 2, 3       # 左右两边都是元组(元组可以省略括号)
    x, y, z = 1, 2          # ValueError: need more than 2 values to unpack
    x, y, z = 1, 2, 3, 4    # ValueError: too many values to unpack
    x, y, *z = 1, 2, 3, 4   # ok,python 3 支持,使用 * 接收多余的值,z 的值为 [3, 4]
    x, *y, z = 1, 2, 3, 4   # ok,y 的值为 [2, 3],z 的值为 4

    另外 python 也支持链式赋值,例如:

    x = y = 123    # 等价于 y = 123 和 x = y 两条语句顺序执行,但是 python 中不可以这样写 x = (y = 123)

    if 语句

    示例:

    age = 3
    if age >= 18:
        print 'adult'
    elif age >= 6:
        print 'teenager'
    else:
        print 'kid'

    注意:条件表达式不需要使用小括号。

    for 语句

    python 中没有 C 风格的 for 语句,python 中用 “*for x in <range-or-list>:*” 的形式。 

    示例一:遍历某个数值区间:

    for i in range(5):  # 等价于 range(0, 5),range(start,stop,step) 函数中 start 和 step 是可以省略的,start 默认为 0 , step 默认为 1
        print i
    View Code

    示例二:遍历数组元素:

    names = ['Michael', 'Bob', 'Tracy']
    
    for name in names:
        print name
    
    for i in range(len(names)):
        print names[i]
    View Code

    示例三:遍历元组元素:

    for week in ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'):
        print week
    View Code

    示例四:遍历字典类型数据:

    jack = { 'gender': 'male', 'age': 23, 'email': 'jack@gmail.com' }
    
    # 遍历所有的 keys
    for key in jack:
        print key + ': ' + str(jack[key])   # age is a number, python does not allow concatenate 'str' and 'int' objects
    for key in jack.keys():
        print key
    
    # 遍历所有 values
    for value in jack.values():
        print value
    
    # 遍历所有的 key/value pairs
    for key, value in jack.items():
        print key, value
    View Code

    示例五:检查一个值是否可以遍历(迭代):

    >>> from collections import Iterable
    >>> isinstance('abc', Iterable) # str是否可迭代
    True
    >>> isinstance([1,2,3], Iterable) # list是否可迭代
    True
    >>> isinstance(123, Iterable) # 整数是否可迭代
    False
    View Code

    while 语句

    示例:

    i = 0
    while i < 10:
        print i
        i += 2

    continue 语句 和 break 语句

    Python 中的 continue 语句和 break 语句 与 C/C++ 中的相应语句作用类似:

    • continue:同 C/C++,结束本次循环,进入下一次循环条件判断。
    • break:同 C/C++,退出当前循环。

    pass 语句

    示例一:定义一个空函数:

    def foo():
        pass

    示例二:if 语句“体”(body)为空:

    if a > 5:
        pass

    import 语句

    几种常用的形式:

    • import module
    • from module import name
    • from module import name1, name2, name3, ...
    • from module import *

    with 语句

    Python 中的 with 语句和 JavaScript 中的 with 语句完全不一样,完全不具有参考性,如果你学过 JavaScript 的 with 语句,忘记它吧!

    Python 中的 with 语句控制着一个上下文块,在进入这个上下文时(执行 with 中的子语句前)和退出上下文时(执行完 with 中的子语句后)自动执行一些操作,先看一个示例:

    class Foo (object):
        def __init__(self):
            print("Foo::__init__() is called")
        def __enter__(self):
            print("Foo::__enter__() is called")
            return self
        def __exit__(self, exc_type, exc_value, exc_trackback):
            print("Foo::__exit__() is called")
        def foo(self):
            print("Foo::foo() is called")
            raise Exception
    
    with Foo() as f:  # f 负责接收 __enter__() 的返回值,这里的 "as f" 是可以省略的,那就意味着后面不能使用新建 Foo 的实例
        f.foo()
    
    # 输出以下内容:
    Foo::__init__() is called
    Foo::__enter__() is called
    Foo::foo() is called
    Foo::__exit__() is called

    with 后面跟一个对象(表达式的结果),并且要求这个对象对应的类有实现 __enter__() 和 __exit__() 方法,在执行 with 子句之前自动调用 __enter__() 方法,在执行 with 子句之后会自动调用 __exit__() 方法。

    文件操作方法 open() 函数返回的就是这样一个对象,使用 with 语句可以有效地避免忘记关闭文件(在 __exit__() 中关闭文件句柄),例如:

    with open("file.txt") as f:
        for line in f.readlines():
            print(line)

    另外值得一提的是:with 的实现是会自动捕获异常的,__exit__() 方法相当于在 try 语句的 finally 子句中执行,所以即便发生了异常,也是会执行的,真的有异常也是在 __exit__() 方法执行完之后再抛出去的。

    完。

  • 相关阅读:
    信号量Semaphore
    进程锁Lock
    创建多进程Process
    什么是进程?什么是线程?进程和线程之间的区别是什么?
    Git命令
    xss攻击问题以及如何防范
    ORM跨表查询问题
    for循环将字典添加到列表中出现覆盖前面数据的问题
    Linux源码的目录结构
    嵌入式中 MMU的功能
  • 原文地址:https://www.cnblogs.com/itwhite/p/12297769.html
Copyright © 2011-2022 走看看