• day18.条件,循环和其他语句


    导入模块
      import modu
      import modu1,modu2,...
      from modu import func1
      from modu import func1,func2,func3,...
      from modu import *
     
    为导入的模块或函数起别名
      import math as mymath
      from math import fabs as aa, sqrt as bb
     
    赋值魔法:
      序列解包:
        多个复制操作同时进行:x,y,z = 1,2,3
        交换两个或更多变量:x,y = y,x
        序列解包:sequence unpacking--将多个值的序列解开,然后放到变量的序列中,当函数或方法返回元组(或其他序列或可迭代对象)时,这个特性尤其有用。
        它允许函数返回一个以上的值并且打包成元组,然后通过一个赋值语句很容易访问。
        放置在赋值=号左边的变量个数必须与所解包的序列中的元素数量完全一致。
        py3中新增了另一个解包特性:可以像函数在参数列表中一样使用星号运算符。
        a,b,*rest = [1,2,3,4] ==> a = 1,b = 2,x = [3,4]
        星号*代表将所有其他的元素都收集到rest中
     
      链式赋值:
        x = y = 5 ===> x = 5,y = 5
        x,y是对用一个值的引用,互不干扰
     
      增量赋值:
        x += 1 ===> x = x + 1
        对于+-*/%等标准运算符都适用
        对于其他类型的数据也适用,只要二元运算符本身适用于这些数据类型
        x = 'abc'
        x *= 2 ===> 'abcabc'
        增量赋值可以使代码更加紧凑简练。
     
    语句块:缩排的乐趣
      语句块是在条件为真(条件语句)时执行,或者执行多次(循环语句)的一组语句。
      在代码前放置空格来缩进语句即可创建语句块。
      块中的每行都应该缩进相同的量。
      很多语言使用特殊单词或字符({)来表示一个语句块的开始,用另外的单词或字符(})表示语句块的结束。
      在python中,用冒号(:)来标识语句块的开始,块中的每一个语句都是缩进的(缩进量相同)。
      当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束了。
     
    条件和条件语句:
      1.布尔变量的作用
      2.条件执行和if语句
      3.else子句
      4.elif子句
      5.嵌套代码块
      6.更复杂的条件

    1.比较运算符
      ==,>,<,>=,<=,!=,is,is not,in,not in
      只有在比较两个相同或近似类型的对象,比较才有意义。
      在py3中,比较不兼容类型的对象已经不再可行。
      在python中,比较运算和赋值运算一样是可以连接的: 0<age<100
     
    2.相等运算符:判断两个值是否相等
     
    3.同一性运算符is:是否为同一个对象(id相同)
     
    4.成员资格运算符in
     
    5.字符串和序列比较:
      相同索引的元素进行比较
      字符串可以按照字母排列顺序比较A<Z<a<z
     
    6.布尔运算符(逻辑运算符):and or not

    短路逻辑(惰性求值):避免了无用的执行代码,可以作为一种技巧使用。
      name = input('').strip() or 'unknown'
      这类短路逻辑可以用来实现三元运算符的作用:
      a if b else c
      如果b为真,返回a,否则返回b
     
    断言(assert):
      断言的工作方式有点像if的变形:
      if not condition:
        print(1111)
      在我们调试代码或者初期测试时,与其在程序在晚些时候崩溃,不如在错误条件出现时直接让它崩溃。
      如果需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert语句就有用了。它可以在程序中设置检查点。
      age = input('请输入年龄').strip()
      assert 0<int(age)<150#在age不满足条件时直接报错
      条件后可以添加字符串,用来解释断言。
      assert 0<int(age)<150,'年纪大了'

     循环:为了在条件为真时,使代码重复执行多次。
      1.while循环:在任何条件为真的情况下重复执行一个代码块
      2.for循环:为一个可迭代对象的每一个元素都执行一个代码块
      3.循环遍历字典元素:
        for key in dict
        for key in dict.keys()
        for val in dict.values()
        for k,v in dict.items()
      4.一些迭代工具:
        1.并行迭代
          程序可以同时迭代两个序列:
          names = ['egon','alex','mxt']
          ages = [18,19,20]
          for i in range(len(ages)):
            print(names[i],ages[i])
          内置函数zip可以用来进行并行迭代,可以把多个序列压缩在一起,返回一个元祖的列表。zip可以应付不等长的序列,当最短序列用完时就会停止。
          list(zip(names,ages)) == [('egon', 18), ('alex', 19), ('mxt', 20)]
        2.编号迭代
          有时想要迭代序列中的对象,还要获取当前对象的索引。
          for x,y in enumerate(list):
            print(x,y)
        3.翻转和排序迭代
          reversed,sorted这两个内置函数,等同于列表的reverse和sort,但是可以作用于任何序列和可迭代对象上,不是修改原对象,且返回翻转或排序后的副本。
     
     
      跳出循环:
        1.break:跳出本层循环
        2.continue:跳出本次循环(跳过剩余的循环体,但不结束循环)
     
     
    pass
    什么都没有发生,在代码中做占位符使用

    del
    一般来说,python会删除那些不再使用的对象(因为使用者不会再通过任何变量和数据结构引用它们)。
    python的垃圾回收机制:python解释器会删除在内存中引用计数为0的值
    del语句会移除一个对象的引用和那个名字本身。
     exec+eval执行和求值字符串:
    有时可能会需要动态地创造python代码,然后将其作为语句执行或作为表达式计算。
    使用exec或eval可以执行存储在字符串中的python代码
    1.exec()
      exec('print(123)')
      exec函数可以执行存储在字符串中的python代码,但也可能会干扰命名空间。
      from math import sqrt
      exec 'sqrt = 5'
      print(sqrt(4))
      很多情况下,需要给它提供命名空间,使它不会干扰已有的变量。
      exec函数最有用的地方在于可以动态的创建代码字符串。
      如果字符串是从其他地方获得的,比如用户输入,那么几乎不能确定其中包含什么代码。
      为了安全起见,可以增加一个字典,起到命名空间的作用。
      from math import sqrt
      dd = {}
      exec 'sqrt=1' in dic
      sqrt(4)
     
    2.eval()
      eval(用于求值)是类似exec的内建函数。
      exec会执行一系列python语句。
      eval会计算python表达式,并且返回结果值。

     总结:
      1.打印:print也已打印由逗号隔开的多个值。参数有sep和end
      2.导入:import module
          import fun from module as xx
      3.赋值:通过序列解包和链式赋值功能,多个变量可以一次性赋值。
          增量赋值可以原地改变变量。
      4.块:块是通过缩排语句组成的一种方法。他们可以在条件和循环语句中使用。
      5.条件:条件语句/布尔表达式
          if/elif/else
          三元表达式: a if x==1 else b
      6.断言:assert 简单来说就是肯定某事为真。如果条件为假,断言会让程序报错。
      7.循环:可以为序列中的每一个元素执行一段语句块。
          continue跳出本次循环;break跳出本层循环。
      8.列表推导式:它不是真正的语句--是看起来像循环的表达式。
             可以基于已有列表根据各种条件生成新的列表。
      9.pass,del,exec,eval

     涉及到的函数:
      chr(n):当传入序号n时,返回一个字符(0<=n<256)
      eval(source[,globals[,locals]]):将字符串作为表达式计算,并返回结果
      enumerate(seq[,start]):产生用于迭代的(索引,值)对
      ord(c):返回单个字符的int值
      range(start,end,step):类似于列表切片,返回一个包含整数的序列
      reversed(seq):产生seq的反向版本,用于迭代
      sorted(seq,key,reverse):返回seq排序后的列表
      zip(seq1,seq2,...):创造用于并行迭代的心序列
  • 相关阅读:
    squid开多端口代理的心得
    用ssh跑pppd(最简单的linuxvpn)
    Asterisk1.2编译与安装
    E1 CE1 PRI BRI T1 的区别
    asterisk卡常见问题(收集整理)
    CCProxy+Eborder开透明代理详细设置(附图文)
    iptables+NAT+squid 透明代理上网实现方案
    asterisk积累命令
    MySQL Cluster的常见问题
    如何配置Silverlight4开发环境
  • 原文地址:https://www.cnblogs.com/maxiaotiaoshishui/p/7281015.html
Copyright © 2020-2023  润新知