s21day11 python笔记

一、函数小高级

  1. 函数名可以当作变量来使用

    #示例一:
    def func():
        print(123)
    
    func_list = [func, func, func]
    # func_list[0]()
    # func_list[1]()
    # func_list[2]()
    for item in func_list:
        v = item()
        print(v)
    
    #示例二:
    def func():
        print(123)
    def bar():
        print(666)
    
    info = {'k1': func, 'k2': bar}
    info['k1']()
    info['k2']()
    
    #注意区别:
    def func():
        return 123
    
    func_list1 = [func,func,func]
    func_list2 = [func(),func(),func()]
    print(func_list1)
    print(func_list2)
  2. 函数可以当作参数进行传递

    #示例:
    def func(arg):
        v1 = arg()
        print(v1)    
    def show():
        print(666)
    
    result = func(show)
    print(result)
    #面试题:多个函数的调用
    def func():
        print('话费查询')
    def bar():
        print('语音沟通')
    def base():
        print('业务办理')
    def show():
        print('流量查询')
    def test():
        print('人工服务')
    
    info = {
        'f1': func,
        'f2': bar,
        'f3':base,
        'f4':show,
        'f5':test
    }
    choice = input('请选择要选择功能:')
    function_name = info.get(choice)
    if function_name:
        function_name()
    else:
        print('输入错误')

二、 lambda表达式

  1. 作用:用于表达简单的函数

  2. 基本形式:

    #三元运算,为了解决简单的if else的情况
    if 1 == 1:
        a = 123
    else:
        a = 456
    #用三元运算表示:
    a =  123  if 1 == 1 else 456
    
    #lambda表达式,为了解决简单函数的情况
    def func(a1,a2):
        return a1 + a2 
    #用lambda表达式表示:
    func = lambda a1,a2: a1+a2          #隐含了return
  3. 重点:

    • lambda表达式只能用一行表示函数
    • 用lambda表达式表示函数时,无法设置新变量,只能用参数作变量
    • 列表所有方法基本上都是返回None,字符串的所有方法基本上都是返回新值
  4. 练习题

    # 练习题1
    USER_LIST = []
    def func0(x):
        v = USER_LIST.append(x)
        return v 
    result = func0('alex')
    print(result)              #None
    
    # 练习题2
    def func0(x):
        v = x.strip()
        return v 
    result = func0(' alex ')
    print(result)               #'alex'
    
    # 练习题3
    USER_LIST = []
    func1 = lambda x: USER_LIST.append(x)
    v1 = func1('alex')
    print(v1)                    #None
    print(USER_LIST)             #['alex']
    
    # 练习题4
    func1 = lambda x: x.split('l')
    v1 = func1('alex')
    print(v1)                    #['a','ex']
    
    # 练习题5
    func_list = [lambda x:x.strip(), lambda y:y+199,lambda x,y:x+y]
    v1 = func_list[0]('alex ')
    print(v1)                    #'alex'
    v2 = func_list[1](100)
    print(v2)                    #299
    v3 = func_list[2](1,2)
    print(v3)                    #3

三、内置函数

函数分为自定义函数和内置函数

python内置函数分类:

  1. 强制转换:int() / str() / bool() / list() / tuple() / dict() / set()

  2. 输入输出:input() / print()

  3. 其他:len() / open() / range() / id() / type()

  4. 数学相关:

    • abs():计算绝对值

    • sum():求和

    • float():转化为浮点型(小数)

      v = 55
      v1 = float(55)
      print(v1)        #55.0
      • 补充:int(55.5) #只保留整数:55
    • max():找到最大值

    • min():找到最小值

    • divmod():取两数相除的商和余数

      #示例:
      a,b = divmod(1001,5)
      print(a,b)          #a=200,b=1
      • 注意:divmod在分页展示时用得比较多

        # 练习题  请通过分页对数据进行展示
        """
        要求:
            每页显示10条数据
            让用户输入要查看的页面:页码
        """
        
        USER_LIST = []
        for i in range(1,836):
            temp = {'name':'你-%s' %i,'email':'123%s@qq.com' %i }
            USER_LIST.append(temp)
        
        # 数据总条数
        total_count = len(USER_LIST)
        
        # 每页显示10条
        per_page_count= 10
        
        # 总页码数
        max_page_num,a = divmod(total_count,per_page_count)
        if a>0:
            max_page_num += 1
        
        while True:
            pager = int(input('要查看第几页:'))
            if pager < 1 or pager > max_page_num:
                print('页码不合法,必须是 1 ~ %s' %max_page_num )
            else:
                start = (pager-1) * per_page_count
                end = pager * per_page_count
                data = USER_LIST[start:end]
                for item in data:
                    print(item)
  5. 进制转换相关:

    • bin():将十进制转换成二进制

    • oct():将十进制转换成八进制

    • int():将其他进制转换成十进制

      • 默认:base = 10
      # 二进制转化成十进制
      v1 = '0b1101'
      result = int(v1,base=2)         #base=2说明读取的是二进制
      print(result)
      
      # 八进制转化成十进制
      v1 = '0o1101'
      result = int(v1,base=8)
      print(result)
      
      # 十六进制转化成十进制
      v1 = '0x1101'
      result = int(v1,base=16)
      print(result)
    • hex():将十进制转换成十六进制

    #1字节等于8位
    # IP: 192.168.12.79  ->  001010010 . 001010010 . 001010010 . 001010010
    
    # 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制并通过,连接起来生成一个新的字符串。
    ip = "192.168.12.79"
    ip_list = ip.split('.') # ['192','168','12','79']
    result = []
    for item in ip_list:
        result.append(bin(int(item)))
    print(','.join(result))
    
    
    #面试题:
    # 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制: 
    #          0010100100001010010001010010001010010 -> 十进制的值。
    # 3232238671
    ip = '192.168.12.79'
    v = ip.split('.')
    info = []
    for i in v:
        date = str(bin(int(i)))
        if len(date) > 10:
            date = date[-8:]
        else:
            count = 10 - len(date)
            date = date.replace('0b','0'*count)
        info.append(date)
    val = "".join(info)
    a = int(val,base=2)
    print(a)
内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!