首页 > 其他 > 详细

No.11函数(三)

时间:2020-03-19 09:51:37      阅读:46      评论:0      收藏:0      [点我收藏+]

No.11

今日概要

  • 函数的小高级
  • lambda 表达式
  • 内置函数

内容回顾

  1. 函数的基本结构

  2. 参数

    • 形参
      • 基本: def func(a1,a2): pass
      • 默认值:def func(a1,a2=666): pass
        • 默认值如是可变类型 → 有坑
      • 万能:*args / **kwargs
    • 实参
      • 位置传参:永远在前面
      • 关键字传参
  3. 返回值

    • 默认返回:None

    • 特殊情况:

      def func():
          return 1,2,3,4
      #返回元组
  4. 作用域

    • 全局和局部

    • 自己有找自己,自己没有找上一级,直到找到全局。

    • 子作用域只能获取或修改上一级的数据值,不能重新赋值。

      NUM = [1,2,3]
      def func():
          #NUM.append(66) 对于父级是可变类型数据可以修改
          global NUM
          NUM = 123
      func() 
  5. 函数的嵌套

    def func():
        name = 'alex'
        def inner():
            print(name)
        name = 'eric'
        inner()
        print(name)
    func()

内容详细

1.函数小高级

a = 123
name = '老男孩'
nums = [11,22,33]
data = nums

def func():
    pass #100行代码

# func = 函数

1.1函数名当作变量

def func():
    print(123)

v1 = func   #函数类似于变量,func代指一块代码的内存地址。
func()   
v1()
#示例1
def func():
    print(123)

func_list = [func,func,func]
func_list[0]()
func_list[1]()
func_list[2]()
#示例2
def func():
    print(123)
    return 666

func_list = [func,func,func]
for item in func_list:
    v = item()
    print(v)
#示例3
def func():
    print(123)
    return 666

func_list = {func,func,func}
for item in func_list:
    item()      #集合会去重
def func():
    print(123)
def bar():
    print(666)

info = {'k1':func,'k2':bar}
info['k1']()
info['k2']()

info = {func:bar} #函数也可以做字典的key,不过一般不这么用。

容易混淆

#示例一
def func():
    print(123)

func_list1 = [func,func,func]
func_list2 = [func(),func(),func()]

print(func_list1)
print(func_list2)
结果:
123
123
123
[func地址,func地址,func地址]
[None, None, None]
#示例二
def func():
    return 123

info = {
    'k1': func,
    'k2': func()
}
print(info)
结果:
{'k1': func地址, 'k2': 123}

1.2函数当作参数传递

def func(arg):
    print(arg)
    
func(1)
func([1,2,3])

def show():
    return 999
func(show)    #打印的是show地址,意义不大。
#示例一
def func(arg):
    arg()    
def show():
    print(666)
    
func(show)
#示例二
def func(arg):
    v1 = arg()
    print(v1)  
def show():
    print(666)
    
func(show)
#示例三:
def func(arg):
    v1 = arg()
    print(v1)  
def show():
    print(666)

result = func(show)
print(result)
结果
666
None
None

面试题

#有10个函数,每个函数表示一个功能。根据用户不同的选择执行相应的函数。
f1 / f2 / f3 / f4 / f5
def fuc():                 
    print('话费查询')
def bar():
    print('流量查询')
def base():
    print('>>>')
def show():
    print('>>>')
def test():
    print('>>>')
    
choice = input('请选择功能:')
dic = {'f1':fuc,
       'f2':bar,
       'f3':base,
       'f4':show,
       'f5':test
       }
choice = input('请选择功能:')

function_name = dic.get(choice)   # 因为通过key取值不存在会报错,所以选用get。
if function_name:
    function_name()
else:                             # 如果没有key,get默认返回None。
    print('输入错误')

2.lambda表达式

用于表示简单的函数

# 三元运算,为了解决简单的if-else情况
if 1 == 1:
    a = 11
else:
    a = 22
    
a = 11 if 1==1 else 22

# lambda表达式,为了解决简单的函数情况
def func(a,b):
    return a + b

func = lambda a,b: a + b
func1 = lambda : 100
func2 = lambda a: a*100
func3 = lambda *args,**kwargs: len(args) + len(kwargs)

DATA = 100
func4 = lambda a: a + DATA
v = func4(1)
print(v)

DATA = 100
def bar():
    DATA = 1001
    func4 = lambda a: a + DATA
    v = func4(1)
    print(v)
bar()

func5 = lambda n1,n2 : n1 if n1 > n2 else n2 
#示例一
USER_LIST = []
func1 = lambda x: USER_LIST.append(x)
v1=func1('alex')
print(v1)
print(USER_LIST)

#示例二
def fun2(x):
    v = x.strip()
    return v
result = func2()
print(result)

#List的方法中基本上都是返回None;Str的方法中基本上都是返回新值。
#示例三
func3 = lambda x: x.split('l')
v = func('alex')
print(v)

#示例四
lst =[
    lambda x: x.strip(),
    lambda y: y + 100,
    lambda x,y: x + y
]

v1 = lst[0]('alex  ')
print(v1)
v2 = lst[1](100)
print(v2)
v3 = lst[2](1,2)
print(v3)

3.内置函数

  • 自定义函数

  • 内置函数

    • len()

    • open()

    • range()

    • id()

    • type()

    • 输入输出

      • print()
      • input()
    • 强制转换

      • int()
      • float()
      • bool()
      • str()
      • dict()
      • list()
      • tuple()
      • set()
    • 数学相关

      • abs() 计算绝对值

        v = abs(-1)
        print v
      • max() 找到最大值

        v = [1,2,88,6,8]
        result = max(v)
        print(result)
      • min() 找到最小值

        v = [1,2,88,6,8]
        result = min(v)
        print(result)
      • sum() 求和

        v = [1,2,88,6,8]
        result = sum(v)
        print(result)
      • divmod() 两数相除得商和余数 ▲▲▲

        a,b = divmod(101,5)
        print(a,b)
        # 练习题 ▲▲▲
        USER_LIST= []
        for i in range(1,836):
            temp = {'name':'alex-%s'%i,'email':'123@qq.com-%s'%i}
            USER_LIST.append(temp)
        # 请通过分页对数据进行展示
        # 要求:每页显示10条数据,让用户输入要查看的页码
        USER_LIST= []
        for i in range(1,836):
            temp = {'name':'alex-%s'%i,'email':'123@qq.com-%s'%i}
            USER_LIST.append(temp)
        
        #数据总条数:假设未知列表条数
        total = len(USER_LIST)
        #每页展示条数:10条
        page_count = 10
        #总页码数
        max_page, a = divmod(total, page_count)
        if a > 0:
            max_page += 1
        
        while True:
            #假设用户输入的是数字
            pager = int(input('请输入要查看的页码:'))
        
            if pager < 0 or pager > max_page:
                print('页码输入不合法,必须是1 ~ %s'%max_page)
            else:
            # 第一页 USER_LIST[0,10]
            # 第二页 USER_LIST[10,20]
            # 第三页 USER_LIST[20,30]
                start = (pager-1) * page_count
                end = pager * page_count
                data = USER_LIST[start:end]
                for item in data:
                    print(item)
      • 进制转换相关:

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

          #只能将10进制转换成2进制
          num = 10
          v1 = bin(num)
          print(v1)
        • oct() 将十进制转换成八进制

          #只能将10进制转换成8进制
          num = 10
          v1 = oct(num)
          print(v1)
        • hex() 将十进制转换成十六进制

          #只能将10进制转换成16进制
          num = 16
          v1 = hex(num)
          print(v1)
        • int() 将其它进制转换成十进制

          #二进制转十进制
          v1 = '0b1101'
          result = int(v1,base=2)
          print(result,bin(result))
          
          #八进制转十进制
          v1 = '0o1101'
          result = int(v1,base=8)
          print(result,oct(result))
          
          #十六进制转十进制
          v1 = '0x1101'
          result = int(v1,base=16)
          print(result,hex(result))

      技术分享图片

      • 面试题

        #1个字节等于8位
        #IP:192.168.12.80 → 01010101.01010101.01010101.01010101
        #IP地址:用.将四个八位的二进制链接起来,我们看到的是转换成十进制的显示。
        示例一
        请将 ip = '192.168.12.79' 中的每个十进制转换成二进制通过逗号链接起来。
        ip = '192.168.12.79'
        ip_list = ip.split('.')
        result = []
        for item in ip_list:
            result.apped(bin(int(i)))
        print(','.join(result))
        
        #面试题:请将 ip = '192.168.12.79' 中的每个十进制转换成二进制后再拼接起来形成新的二进制,在计算出新的二进制转换成十进制的值是多少。
        ip = '192.168.12.79'
        lst = ip.split('.')
        lst2 = []
        print(lst)
        for i in lst:
            a = bin(int(i)).lstrip('0b')
            if len(a) < 8:
                a = a.rjust(8,'0')
            lst2.append(a)
        b = ''.join(lst2)
        print(int(b,2))

总结

  • 函数当作是一个变量:参数传值 / 函数嵌套在列表字典中 ▲
  • lambda 表达式
  • 内置函数

No.11函数(三)

原文:https://www.cnblogs.com/elliottwave/p/12521810.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!