zoukankan      html  css  js  c++  java
  • Python学习————python基础复习(三)

    python基础复习(三)

    一、三元表达式

    三元表达式:

    name = input('姓名')
    res = '你好' if name == '闫' else '您好'
    print(res)
    

    列表推导式:

    #1、示例
    egg_list=[]
    for i in range(10):
        egg_list.append('鸡蛋%s' %i)
    
    egg_list=['鸡蛋%s' %i for i in range(10)]
    
    #2、语法
    [expression for item1 in iterable1 if condition1
    for item2 in iterable2 if condition2
    ...
    for itemN in iterableN if conditionN
    ]
    类似于
    res=[]
    for item1 in iterable1:
        if condition1:
            for item2 in iterable2:
                if condition2
                    ...
                    for itemN in iterableN:
                        if conditionN:
                            res.append(expression)
    
    #3、优点:方便,改变了编程习惯,可称之为声明式编程
    

    生成器表达式:

    #1、把列表推导式的[]换成()就是生成器表达式
    
    #2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
    >>> chicken=('鸡蛋%s' %i for i in range(5))
    >>> chicken
    <generator object <genexpr> at 0x10143f200>
    >>> next(chicken)
    '鸡蛋0'
    >>> list(chicken) #因chicken可迭代,因而可以转成列表
    ['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]
    
    #3、优点:省内存,一次只产生一个值在内存中
    

    递归与二分法:

    递归调用是函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用

    #直接调用本身
    def f1():
        print('from f1')
        f1()
    f1()
    
    #间接调用本身
    def f1():
        print('from f1')
        f2()
    
    def f2():
        print('from f2')
        f1()
    f1()
    
    # 调用函数会产生局部的名称空间,占用内存,因为上述这种调用会无需调用本身,python解释器的内存管理机制为了防止其无限制占用内存,对函数的递归调用做了最大的层级限制
    四 可以修改递归最大深度
    
    import sys
    sys.getrecursionlimit()
    sys.setrecursionlimit(2000)
    
    def f1(n):
        print('from f1',n)
        f1(n+1)
    f1(1)
    
    虽然可以设置,但是因为不是尾递归,仍然要保存栈,内存大小一定,不可能无限递归,而且无限制地递归调用本身是毫无意义的,递归应该分为两个明确的阶段,回溯与递推
    
    

    回溯与递推

    1、递归调用应该包含两个明确的阶段:回溯,递推
        回溯就是从外向里一层一层递归调用下去,
            回溯阶段必须要有一个明确地结束条件,每进入下一次递归时,问题的规模都应该有所减少(否则,单纯地重复调用自身是毫无意义的)
    
        递推就是从里向外一层一层结束递归
    
    、示例+图解。。。
     salary(5)=salary(4)+300
     salary(4)=salary(3)+300
     salary(3)=salary(2)+300
     salary(2)=salary(1)+300
     salary(1)=100
    
     salary(n)=salary(n-1)+300     n>1
     salary(1) =100                n=1
    
    def salary(n):
        if n == 1:
            return 100
        return salary(n-1)+300
    
    print(salary(5))
    

    内置函数:

    注意:内置函数id()可以返回一个对象的身份,返回值为整数。这个整数通常对应与该对象在内存中的位置,
    但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以内存地址为准。
    is运算符用于比较两个对象的身份,等号比较两个对象的值,内置函数type()则返回一个对象的类型
    

    img

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/x945669/p/13221452.html
Copyright © 2011-2022 走看看