20200118--python学习第十一天

岁酱吖の 提交于 2020-01-18 16:31:24

今日内容

  函数小高级

  lambda表达式

  内置函数

内容回顾

  1.函数基本结构

  2.参数 

    形参

      基本参数:def func(a1,a2):pass

      默认值:def func(a1,a2=123):pass 注意:默认值如果是不可变类型,随便玩。可变类型:有坑

      无敌:*args,**kwargs

    实参:

      位置参数

      关键字参数

   3.返回值

      默认返回值:None

      特殊情况:返回的元组

      def func():

          return 1,2,32,4

   4.作用域

      全局与局部

      自己有找自己,自己没有找父级;

      子作用域用于只能读取或修改父级的值,不能重新赋值;

      NUM = [1,2,3]

      def func():

        global NUM

        NUM  =123

      func()

   5.函数嵌套 

    def func():
          name = 'oldboy'
          def inner():
                print(name)
          name = 'alex'
          inner()
          print(name)
    func()  #输出结果为:alex alex

内容详情

  1.函数小高价 

a = 123name = "alex"nums = [11,22,33,44]data = numsdef func():    pass#func = 函数

  2.函数名当作变量来使用    

def func():    print(1,3,3)v1 = funcfunc()v1()#两个实现过的功能一样,都是调用该函数#示例二
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)  #请注意该处打印值为None
#示例三 函数还可以作为字典中的元素def func():    print(123)def bar():    print(666)info = {'k1':func,'k2':bar}info['k1']()  #输出结果为:123info['k2']()  #输出结果为:666#示例四  混淆你
def func():    return 123fun_list1 = [func,func,func]fun_list2 = [func(),func(),func()]print(fun_list1)  #请注意该处返回的func函数的地址#[<function func at 0x000001C7B62CE0D0>, <function func at 0x000001C7B62CE0D0>, <function func at 0x000001C7B62CE0D0>]print(fun_list2)#输出结果为:[123,123,1223]info= {    'k1':func,    'k2':func()}print(info) #输出结果为:{'k1': <function func at 0x0000020CA36DE0D0>,'k2':123}

  3. 函数可以当作参数进行传递 

def func(arg):    print(arg)func(1) #输出结果为:1func([1,2,3,4])  #输出结果为:[1,2,3,4]def show():    return 999func(show)  #输出结果为:show函数的内存地址 <function show at 0x00000234D2B2E8B0>#示例二def func(arg):    v1 = arg()    print(v1)def show():    print(666)func(show) #输出结果为:666  None#示例三def func(arg):    v1 = arg()    print(v1)def show():    print(666)result = func(show)print(result)  #输出结果为:666 None  None#面试题def func():    print("花费查询")def bar():    print("语音服务")def base():    print("xxx")def show():    print('xxxx')def test():    print('xxxxx')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("输入错误")

  4.lambda表达式:用于简单的函数

#lambda表达式if 1 == 1:    a = 123else:    a = 245# #三元运算表达a = 123 if 1==1 else 245#请注意lambda表达式,为了解决简单的情况:如def func(a1,a2):    return a1+100func = lambda a1,a2 :a1+100func1 = lambda: 100func2 = lambda x1:x1*10func3 = lambda *args,**kwargs: len(args)+len(kwargs)DATA = 100func4 = lambda a1:a1+DATAv = func4(1)print(v) #输出结果为:101DATA =100def func():    DATA = 1000    func4 = lambda a1:a1+DATA    v = func4(1)    print(v)func() #输出结果为:1001func5 = lambda n1,n2 :n1 if n1>n2 else n2v = func5(1111,2)print(v) #输出结果为:111#练习题1USER_LIST= []def func0(x):    v = USER_LIST.append(x)    return vresult = func0('alex')print(result) #输出结果为:None#练习题2def func0(x):    v = x.strip()    return vresult = func0(' alex ')print(result) #输出结果为:alex#注意:总结:列表所有方法基本上都是返回None;字符串的所有方法基本上都是返回新值#练习3USER_LIST = []func1 = lambda x :USER_LIST.append(x)v = func1("alex")print(v)print(USER_LIST)#输出结果为:None ['alex']#练习题4func1 = lambda x : x.split("l")v1 = func1("alex")print(v1) #输出结果为:['a','ex']#练习题5func_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

 

  5.内置函数

    1.自定义函数

    2.内置函数

      其他:len/open /range/id/type/

      输入输出:input/print

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

      数学相关:abs()绝对值/float()转换为浮点类型小数/max()找到最大值/min()找到最小值/sum()求和/divmod() 两数相除得到的商与余数

divmod()函数示例:

 

#divmod 两数相除得到的商与余数# a,b = divmod(1001,5)# print(a,b)# #输出结果为 200 1#练习题 请通过分页对数据进行展示"""要求:每页显示10条数据 让用户输入要查看的页面:页 第1页:USER_LIST[0:10]->0123456789          第2页:USER_LIST[10:20]         第3页:USER_LIST[20:30]"""USER_LIST = []for i in range(0,836):    temp = {'name':'我有%s个苹果'%i,'mail':'123%s@qq.com'%i}    USER_LIST.append(temp)print(USER_LIST)#数据总条数total_count = len(USER_LIST)#每页显示的条数per_page_count = 10#总页码数max_page_num,a = divmod(total_count,per_page_count)if a > 0:    max_page_num += 1else:    max_page_num = max_page_numwhile True:    pager = int(input("请输入你要查看的页数:"))    if pager < 1 or pager >max_page_num :        print("页码不合法,必须是1—%s" % max_page_num)        break    else:        start= (pager-1)*per_page_count        end = pager*per_page_count        content = USER_LIST[start:end]        for i in content :            print(i)

 

      强制转换:

强制转换示例:  

bin 将十进制转换为二进制:num=13v1=bin(num)print(v1)oct 将十进制转换为八进制:num=13v1=oct(num)print(v1)hex 将十进制转换为十六进制:num = 13v1 =hex(num)print(v1)int 是将其他进制转换为十进制#将二进制转换为十进制v1='0b1101'result= int(v1,base = 2)print(v1)#将八进制转换为十进制v1='0o1101'result= int(v1,base = 8)print(v1)#将十六进制转换为十进制v1='0x1101'result= int(v1,base = 16)print(v1) 

面试题1:

 

#1.请将ip="192.168.12.79"中的每个十进制数转换成二进制并通过,连接起来生成一个新的字符串。
  
ip ="192.168.12.79"v = []data_list = ip.split(".")for i in data_list:    i = int(i)    number_bin= bin(i)    v.append(number_bin)new_string= ','.join(v)print(new_string)

 

面试题2

#2.请将ip="192.168.12.79"中的每个十进制数转换成二进制:
ip = '192.168.12.79'ip_list = ip.split(".")data = []for item in ip_list:    bin_num = bin(int(item))    print(bin_num[2:])    if len(bin_num[2:]) == 8:        data.append(bin_num[2:])    else:        new_bin = str(bin_num[2:]).rjust(8,'0')        data.append(new_bin)data_join= '0b'+"".join(data)print(data_join)print(int(data_join,base = 2))

今日总结   

  函数当作是一个变量:参数传值 / 当元素嵌套到字典列表中。5*

 

  lambda 表达式3*

 

  内置函数3*

 



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!