zoukankan      html  css  js  c++  java
  • Python基础02 条件、循环及其他语句

    描述

      Python是一种面向对象的解释性高级编程语言。print、import语句、赋值语句、条件语句和循环语句等都是包含对象的表达式。

    1、print

      print可以打印一个表达式或者多个用逗号分隔开的表达式。表达式式要么是字符串,要么就被自动转换为字符串。

      print目前其实是一个函数:

    print(dir(print()))

      print函数返回值是 NoneType?执行以下代码均会出现 error.

    list(print('age', 2)) # TypeError: 'NoneType' object is not iterable
    len(print('age', 2))  # TypeError: object of type 'NoneType' has no len()

    笔记:

       1、print打印多个表达式,不同表达式之间用逗号分隔,则是默认分隔符为空格。如果需要,可以通过属性 sep='_' 自定义分隔符。

       2、不同表达式通过 + 连接之后的打印结果将没有空格作为分隔符。

       3、print默认结束字符串为换行符。如果需要,可以通过属性 end=‘ ’ 自定义空字符串为结束字符串。

    2、import语句

      执行import语句,可以导入整个模块,也可以导入模块中的特定对象。

    # 导入math整个模块
    # import 模块1
    import math
    math.sqrt(10)
    # from 模块1 import *,不建议使用!
    from math import *
    sqrt(10)
    #导入math模块里面的sqrt
    from math import sqrt

    笔记:

       1、两个不同的模块可能包含有相同名称的对象(全局变量和函数)。当这些模块被同时导入到一个模块中时,需要给其中一个模块的对象赋予一个别名。Python解释器是从上往下逐行执行代码。如果不使用别名,Python解释器执行该函数或其他指令时,将调用的是程序中最后一个模块中的对象。

    from somemodule import somefunction as ...

       2、有些模块组成层次结构,即一个模快位于另一个模块中。

    3、赋值语句

     1、序列解包(可迭代对象解包):

      将可迭代对象解包,并将得到的值存储到一系列变量。可迭代的对象包括列表,元组,字典和字符串,与索引或者键获取可迭代对象的元素依次赋值给多个变量,序列解包并行给多个变量赋值。

    num1, num2, *rest_num = [1, 2, 3, 4, 5]
    print(num1, num2, rest_num)
    a, *b, c = 'abc'
    print(a, b, c)

    笔记:

       1、* 运算符可以收集多余的值,但是带 * 的变量最终包含的总是一个列表

     2、链式赋值

      将多个变量关联到同一个值。

    import math
    
    x = y = math.sqrt(10)
    
    # 以上代码与以下代码等价
    
    y = math.sqrt(10)
    x = y 
    
    # 上面两个代码与以下代码不等价
    
    y = math.sqrt(10)
    
    x = math.sqrt(10)

     3、增强赋值

      增强赋值适用于所有的标准运算符,如 *、+、-、%、//、/等,增强赋值也适用于其他数据类型:foo *= 2

    4、代码块(一组语句)

      代码块是一组语句。代码块是通过缩进代码(增加空格)来创建的。缩进代码块可以通过制表符,Python当中制表符解释为移到下一个制表位。(相邻制表位间隔8个空格符),但是标准的Python代码缩进是使用4个空格缩进代码。

      Python语言当中冒号:指出接下来的一组语句是代码块,并将代码块中的每一行代码缩进相同程度。

    5、条件语句

     1、判断-布尔值、比较运算符、布尔运算符

      1、真值也称为布尔值。标准值:False,None,、各种数据类型:‘ ’,0,[],(),{} 都会被解释器视为,而其他值都被视为真(包括 Ture)

      2、类型 bool 可以装换其他值为布尔值,在Python解释器中值会被自动转换。

      3、对象相同可以使用比较运算符:is;对象相等可以使用比较运算符:==。is比较的是两者是否是同一个对象,所以比较的是内存地址(id是否相同),==是值比较。不可变对象,例如int,str,它会直接进行值比较。对于Python已知的对象,会调用他们的__eq__函数来比较。

      4、对象缓存机制,Python会对比较小的对象缓存,下次用到比较小的对象(,字符串)时,会去缓存区查找,如果找到,不会再开辟新的内存,而是继续把小对象的地址赋给新的值

    """
    x = 1
    y = 1
    print(x is y)
    print(id(x))
    print(id(y))
    """
    z = [1, 2]
    y = [1, 2]
    print(z is y)
    print(z is [1, 2])

      5、字符串和序列的比较,字符串的比较是利用函数 ord ,按照字符串中字符排列顺序依次获取字符在ASCII码表中的顺序值并进行比较。序列的比较方式与字符串比较方式相似,但是序列包含的元素可能不是字符,其他类型的元素如元组和列表等,也是根据同样的规则对元素进行比较。

      6、布尔运算符: and、 or、 not ,只做必要计算。如果使用布尔运算符,要注意表达式的先后顺序,。如 表达式1 and 表达式2 ,只有表达式1为真才会执行表达式2,如果表达式1为假,立刻返回假,而不会关心表达式2。

     2、条件语句: if、elif、else

    students_age =[15,16,12,14,17,12,10];
    
    for age in students_age:
        if age == 10:
            print("current student's age is :" + str(age));
        elif age == 12:
            print("the age of " + str(age) + " has two students");
        else:
            print("age is older then 12");

    笔记:

      可迭代对象和迭代器,任何实现了__iter____next__()方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值。range()函数返回的是一个可迭代对象,list() 函数是对象迭代器,把对象转为一个列表,返回的变量类型为列表。

    6、断言语句 assert

      断言语句,提醒核查程序是否满足预先设定的要求。逻辑解释:if not codition:crash progam

    num = input('give a number: ')
    assert 0 < num < 100, 'the number needs to be realistic'

    7、条件语句 for 循环

      在条件为真时,反复执行代码块。python时面向对象的语言,也就是条件为真时,对象可以反复执行代码块,所以可进行 for 循环的对象都是可迭代的对象。可执行r 循环语句的对象肯定是可迭代对象,但是可迭代对象不一定就能执行 for 循环语句。

      1、迭代字典

    y = {'a': 'b', (1, 2): 'c', 42: 'age'}
    for key in y:
        z = y.values()
        x = list(y.values())
        print(key, "corresponds to:", z, x)

    笔记:

      1、方法:d.items、d.keys、d.values 返回值的数据类型是字典视图,字典视图只能确定其长度(函数 len )和执行成员检查( in )。

      2、字典元素的排列顺序是不确定的。如果需要按照特定的顺序迭代字典的键或者值,需要将键或者值放在列表中,对列表进行排序,然后以列表中的元素即键或者值进行迭代。

      3、模块collections中的OrderdDict类可以让映射记住其项的插入顺序。

    # 代码来源:https://www.jianshu.com/p/3a49908295ce
    In [1]: from collections import OrderedDict In [2]: favorite_language = OrderedDict() In [3]: favorite_language["zhangsan"] = "Enlish" In [4]: favorite_language["lisi"] = "Chinese" In [5]: favorite_language["wangwu"] = "French" In [6]: favorite_language Out[6]: OrderedDict([('zhangsan', 'Enlish'), ('lisi', 'Chinese'), ('wangwu', 'French')]) In [7]: for name, language in favorite_language.items(): ...: print(name +": " + language) ...: zhangsan: Enlish lisi: Chinese wangwu: French In [8]: type(favorite_language) Out[8]: collections.OrderedDict

      4、迭代工具---模块itertools、内置函数 zip

      模块itertools

      模块里面有一部分函数可以帮助迭代序列。

      函数 zip:

      函数zip可以将两个序列“缝合”,返回一个由元组组成的序列(序列的元素都有编号,为什么不能通过索引获取元组呢???)。返回值是一个适合迭代的对象,可以使用list将其转换为列表。

    num1 = [1, 2, 3, 4]
    num2 = ['day1', 'day2', 'day3']
    x = zip(num1, num2)
    print((1, 'day1') in x)
    y = list(x)
    print((2, 'day2') in y)
    print(x)
    print(y)
    print(dir(zip()))

    笔记:

      函数zip和函数reversed返回的是一个可以迭代的神秘对象。该对象可以用于在for语句中使用判断是否包含指定元素,或者调用join、list将可迭代的对象输出为字符串或者列表,但是该序列却不能执行索引或者切片操作,也不能调用列表方法。

    8、循环中间运行,特殊作用的语句

      break语句:结束(跳出)循环。代码重复通常被视为坏事,while Ture:... ;if...:break技巧可以是一种解决该问题的一种方法。

      continue语句:结束当前迭代,并调到下一次迭代开头

      pass语句:python中的pass语句什么都不执行,但是可以修复Python问题。

      del语句:删除到对象的引用还会删除名称本身,导致该名称未被定义,但是该对象没有被删除。

    x = [x for x in range(1, 10, 2)]
    y = x
    print(x, y)
    del x
    print(y)
    print(x)

      曾为语句但现为函数的 exec 和与其相关的 eval:exec将字符串当成代码执行,由于字符串里面的内容可能会污染代码的命名空间,需要向该函数传递一个字典作为命名空间(scope = {} ,scope里面还包含所有内置函数和值的字典__builtins__)。eval将字符串当成有效的表达式来求值,并返回结果。eval的结果可以是字符,序列和映射等数据结构。不要滥用eval函数:不要直接使用eval直接转换 input 的结果,因为可以使用其他模块进行强大的操作。如:input输入的是'__inport__('os').system('touch text')'将可直接操作项目内容,可能危害项目正常运行。

    from math import sqrt
    scope = {} # 可以在该命名空间添加一些值 scope['x'] = 1
    exec('sqrt = 4',scope)
    print(dir(scope))
    print(sqrt)
    print(sqrt(4))

     

      

    print(eval(16*2))

     

    print(eval('16*2'))

     

    print(eval(input('what: ')))

     9、列表推导

      列表是从其他列表创建列表的方式。列表推导里面元素的循环语句可以嵌套。

    x = [x for x in range(1, 10, 2)]
    print(x)
    

     笔记:

      1、列表推导是代码更改整洁

      2、字典的使用可以使代码运算效率更高,因为字典可以减少检查的可能性。

  • 相关阅读:
    oracle 查询 当前最大时间的value的值
    Visual Studio《加载此属性页时出错》的解决办法
    (转) 关于在IE6下 无法跳转问题
    LINQ TO XML 个人的一些心得1
    CSS实现单行、多行文本溢出显示省略号(…)
    html 图像映射(一个图像多个连接)
    JS页面跳转大全
    首行负缩进达到内容对齐的目的
    HTML图片死活不显示
    JS高级. 06 缓存、分析解决递归斐波那契数列、jQuery缓存、沙箱、函数的四种调用方式、call和apply修改函数调用方法
  • 原文地址:https://www.cnblogs.com/yinminbo/p/11312622.html
Copyright © 2011-2022 走看看