1 lambda表达式 (匿名函数)

用于表示简单的函数

lambda表达式,为了解决简单函数的情况:

  1. def func(a1,a2): =====> func = lambda a1,a2:a1+a2 # 函数直接得到返回值,这里隐藏了return
  2. return a1+a2 简化
  1. # 三元运算,为了解决简单的if else的情况,如:
  2. if 1 == 1:
  3. a = 123
  4. else:
  5. a = 456
  6. a = 123 if 1 == 1 else 456
  7. # lambda表达式,为了解决简单函数的情况,如:
  8. def func(a1,a2):
  9. return a1 + 100
  10. func = lambda a1,a2: a1+100
  1. func1 = lambda : 100
  2. func2 = lambda x1: x1 * 10
  3. func3 = lambda *args,**kwargs: len(args) + len(kwargs)
  4. DATA = 100
  5. func4 = lambda a1: a1 + DATA
  6. v = func4(1)
  7. print(v)
  8. DATA = 100
  9. def func():
  10. DATA = 1000
  11. func4 = lambda a1: a1 + DATA
  12. v = func4(1)
  13. print(v)
  14. func()
  15. func5 = lambda n1,n2: n1 if n1 > n2 else n2
  16. v = func5(1111,2)
  17. print(v)

lambda表达式只能用一行来表示函数,只能用参数来作为变量。

练习题

  1. # 练习题1
  2. USER_LIST = []
  3. def func0(x):
  4. v = USER_LIST.append(x)
  5. return v
  6. result = func0('alex')
  7. print(result)
  8. # 练习题2
  9. def func0(x):
  10. v = x.strip()
  11. return v
  12. result = func0(' alex ')
  13. print(result)
  14. ############## 总结:列表所有方法基本上都是返回None;字符串的所有方法基本上都是返回新值 #################
  15. # 练习题3
  16. USER_LIST = []
  17. func1 = lambda x: USER_LIST.append(x)
  18. v1 = func1('alex')
  19. print(v1)
  20. print(USER_LIST)
  21. # 练习题4
  22. func1 = lambda x: x.split('l')
  23. v1 = func1('alex')
  24. print(v1)
  25. # 练习题5
  26. func_list = [lambda x:x.strip(), lambda y:y+199,lambda x,y:x+y]
  27. v1 = func_list[0]('alex ')
  28. print(v1)
  29. v2 = func_list[1](100)
  30. print(v2)
  31. v3 = func_list[2](1,2)
  32. print(v3)

总结:

列表所有方法基本上都是返回None,字符串的所有方法基本上都是返回新值。

2 内置函数

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

目前python的内置函数分为几大类:

  • 1.强制转换

    bool() / int() / str() / list() / dict() /tuple() / set()

  • 2.输入输出

    print() / input()

  • 3.其他

    len() / open() / id() / range() / type()

  • 4.数学相关

      1. abs() 绝对值

        1. v = abs(-1)
        2. print(v) # 1
      2. float() 转换成浮点型(小数)

        1. v = 55
        2. v1 = float(v)
        3. print(v1) # 55.0
      3. max() 找到最大值

        1. v = [1,2,33,5,9]
        2. result = max(v)
        3. print(result) # 33
      4. min() 找到最小值

        1. v = [1,2,311,11,8]
        2. v2 = min(v)
        3. print(v2) # 1
      5. sum() 求和

        1. v = [1,2,311,11,9]
        2. v1 = sum(v)
        3. print(v1) # 334
      6. divmod() 两数相除的商和余数

        1. a,b = divmod(1001,5)
        2. print(a,b) # 200 1

        补充:字符串格式化:'你少妻-%s' %(i,) ------>后面%(i,)如果括号中只有一个变量,可以写成:'你少妻-%s' %i

        1. # 练习题 请通过分页对数据进行展示
        2. """
        3. 要求:
        4. 每页显示10条数据
        5. 让用户输入要查看的页面:页码
        6. """
        7. USER_LIST = []
        8. for i in range(1,836):
        9. temp = {'name':'你少妻-%s' %i,'email':'123%s@qq.com' %i }
        10. USER_LIST.append(temp)
        11. # 数据总条数
        12. total_count = len(USER_LIST)
        13. # 每页显示10条
        14. per_page_count= 10
        15. # 总页码数
        16. max_page_num,a = divmod(total_count,per_page_count)
        17. if a>0:
        18. max_page_num += 1
        19. while True:
        20. pager = int(input('要查看第几页:'))
        21. if pager < 1 or pager > max_page_num:
        22. print('页码不合法,必须是 1 ~ %s' %max_page_num )
        23. else:
        24. """
        25. # 第1页:USER_LIST[0:10] -> 0123456789
        26. # 第2页:USER_LIST[10:20]
        27. # 第3页:USER_LIST[20:30]
        28. ...
        29. """
        30. start = (pager-1) * per_page_count
        31. end = pager * per_page_count
        32. data = USER_LIST[start:end]
        33. for item in data:
        34. print(item)
      • 7.pow

        pow(x,y) 表示x的y次方

        1. v = pow(2,3)
        2. print(v) # 8
      • 8.round 保留小数点后几位小数,还会四舍五入。

        1. V = round(1.127,1/2)
        2. print(v) # 1.1 / 1.13
  • 5.进制转换相关

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

      1. num = 13
      2. v1 = bin(num)
      3. print(v1) # 0b1101
    • oct() 将十进制转换成八进制

      1. num = 8
      2. v1 = oct(num)
      3. print(v1) # 0o10
    • int() 将其他的进制转换成十进制

      1. # 二进制转化成十进制
      2. v1 = '0b1101'
      3. result = int(v1,base=2)
      4. print(result) # 13
      5. # 八进制转化成十进制
      6. v1 = '0o1101'
      7. result = int(v1,base=8)
      8. print(result)
      9. # 十六进制转化成十进制
      10. v1 = '0x1101'
      11. result = int(v1,base=16)
      12. print(result)
    • hex() 将十进制转换成十六进制

      1. num = 16
      2. v1 = hex(num)
      3. print(v1) # 0x10

      练习题

      1. # 1字节等于8位
      2. # IP: 192.168.12.79 -> 001010010 . 001010010 . 001010010 . 001010010
      3. # 1. 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制并通过,连接起来生成一个新的字符串。
      4. ip = "192.168.12.79"
      5. ip_list = ip.split('.') # ['192','168','12','79']
      6. result = []
      7. for item in ip_list:
      8. result.append(bin(int(item)))
      9. print(','.join(result))
      10. # 2. 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制:
      11. # 0010100100001010010001010010001010010 -> 十进制的值。
      12. # 3232238671
      13. ip = "192.168.12.79"
      14. ip1 = ip.split('.')
      15. lis = []
      16. for i in ip1:
      17. lis.append(bin(int(i)))
      18. # val = ','.join(lis)
      19. # b = val.replace('0b', '')
      20. # b1 = b.split(',')
      21. b1 = ','.join(lis).replace('0b', '').split(',')
      22. e = []
      23. #f or c in b1:
      24. for c in ','.join(lis).replace('0b', '').split(','):
      25. if len(c) < 8:
      26. val = 8 - len(c)
      27. d = list(c)
      28. d.insert(0,'0' * val)
      29. d1 = ''.join(d)
      30. e.append(d1)
      31. else:
      32. e.append(c)
      33. f = ''.join(e)
      34. f1 = int(f,base = 2 )
      35. print(f1)
  • 6.编码相关

    • chr 将十进制数字转换成Unicode编码中的对应字符串

      1. v = chr(65)
      2. print(v) # A
    • ord 根据字符在Unicode编码中找到其对应的十进制

      1. v = ord('中')
      2. print(v) # 20013
    • 应用:

      1. import random
      2. v = random.randint(65,90)
      3. print(v) # 随机获得65~90之间的数字
      4. import random
      5. data = []
      6. for i in range(6)
      7. v = random.randint(65,90)
      8. data.append(chr(v))
      9. print(''.join(data)) # 6位随机字符串验证码
      10. import random
      11. def get_random_code(length=6):
      12. data = []
      13. for i in range(length):
      14. v = random.randint(65,90)
      15. data.append(chr(v))
      16. return ''.join(data)
      17. code = get_random_code()
      18. print(code) # 6位随机字符串验证码
      1. import random # 导入一个模块
      2. v = random.randint(起始,终止) # 得到一个随机数
  • 7.高级一点的内置函数

    • map 循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回。

      1. V1 = [11,22,33,44]
      2. # map(x,v1) 第一个参数必须是函数,第二个参数必须是可迭代类型(可以被for循环的)
      3. def func(arg):
      4. print(arg)
      5. # map(func,v1) # 执行后并不打印arg,这是py3的一个特性,py3现在还不执行以后会执行
      6. result = map(func,v1) # 然后将函数的返回值添加到一个[]中
      7. # print(result) py2会直接返回列表
      8. # print(result) py3不会,会得到一个对象/东西,想返回列表的话需要强制转换成列表
      9. print(list(ruselt)) # result得到的是一个对象<map.objecta……>,需要list()才能打印列表
      1. v1 = [11,22,33,44]
      2. result = map(lambda x:x+100,v1)
      3. print(list(result)) # 特殊
    • filter

      result = filter(函数,参数)

      1. v1 = [11,22,33,'asd',44,'xf']
      2. def func(x):
      3. if type(x) == int:
      4. return True
      5. return False
      6. result = filter(func,v1) # [11,22,33,44]
      7. print(list(result))
      8. result = filter(lambda x: True if type(x) == int else False ,v1)
      9. print(list(result))
      10. result = filter(lambda x: type(x) == int ,v1)
      11. print(list(result))
    • reduce 累计得到一个结果

      reduce现在不在py3的内置函数种了 ,但py2的内置函数里包含。

      1. import functools
      2. v1 = ['wo','hao','e']
      3. def func(x,y):
      4. return x+y
      5. result = functools.reduce(func,v1)
      6. print(result)
      7. result = functools.reduce(lambda x,y:x+y,v1)
      8. print(result)
  • 8.类相关的

      1. type,查看类型

        1. class Foo:
        2. pass
        3. obj = Foo()
        4. if type(obj) == Foo:
        5. print('obj是Foo类的对象')
      2. issubclass

        判断某个类是不是另一个类或其基类的子类。

        issubclass(类1,类2) 类1—>子类名,类2—>基类名

        1. class Base:
        2. pass
        3. class Base1(Base):
        4. pass
        5. class Foo(Base1):
        6. pass
        7. class Bar:
        8. pass
        9. print(issubclass(Bar,Base))
        10. print(issubclass(Foo,Base))
      3. isinstance

        判断某个对象是否是某个类或其基类的实例(对象)

        1. class Base(object):
        2. pass
        3. class Foo(Base):
        4. pass
        5. obj = Foo()
        6. print(isinstance(obj,Foo)) # 判断obj是否是Foo类或其基类的实例(对象)
        7. print(isinstance(obj,Base)) # 判断obj是否是Foo类或其基类的实例(对象)
      4. super

        1. class Base(object):
        2. def func(self):
        3. print('base.func')
        4. return 123
        5. class Foo(Base):
        6. def func(self):
        7. v1 = super().func()
        8. print('foo.func',v1)
        9. obj = Foo()
        10. obj.func()
        11. # super().func() 去父类中找func方法并执行
        1. class Bar(object):
        2. def func(self):
        3. print('bar.func')
        4. return 123
        5. class Base(Bar):
        6. pass
        7. class Foo(Base):
        8. def func(self):
        9. v1 = super().func()
        10. print('foo.func',v1)
        11. obj = Foo()
        12. obj.func()
        13. # super().func() 根据类的继承关系,按照顺序挨个找func方法并执行(找到第一个就不在找了)
        1. class Base(object): # Base -> object
        2. def func(self):
        3. super().func()
        4. print('base.func')
        5. class Bar(object):
        6. def func(self):
        7. print('bar.func')
        8. class Foo(Base,Bar): # Foo -> Base -> Bar
        9. pass
        10. obj = Foo()
        11. obj.func()
        12. # 多继承
        13. # super().func() 根据self对象所属类的继承关系,按照顺序挨个找func方法并执行(找到第一个就不在找了)

        super().要查找的方法

        super().func() 根据self对象所属类的继承关系(从左向右依次查找),按照顺序挨个找func方法并执行(找到第一个就不再找了)

        super 遵循mro顺序查找上一个类的

        supper().func()不是查找父类,而是根据mro顺序,找到自己对应的下一个类

python — lambda表达式与内置函数的更多相关文章

  1. 第四章 函数之lambda 表达式和内置函数

    4.5 lambda 表达式 用于表示简单的函数. # 三元运算,为了解决简单的if else的情况,如:if 1 == 1:    a = 123else:    a = 456# 相当于a = 1 ...

  2. 【Python全栈笔记】04 [模块二] 18 Oct lambda表达式, 内置函数

    lambda表达式 lambda表达式是函数的一种简化,如下面两种函数定义方法,实际上效果是一样的. 使用lambda表达式的函数,func2是函数名,lambda: 后面的123 即为返回值. de ...

  3. python入门之lambda表达式、内置函数

    lambda 简单的函数就可以用lambda表达式 格式: abc = lambda a1,a2:a1+a2 其中,传参是a1和a2,返回值是a1+a2 内置函数 abs(a) #取绝对值 all(a ...

  4. lambda表达式、内置函数、进制和文件操作

    lambda表达式 定义函数(普通方式)def f1(): return 123 f2 = lambda : 123 def f3(a1,a2): return a1+a2 定义函数(lambda表达 ...

  5. 十、lambda表达式、内置函数之filter、map、reduce

    lambda表达式   学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 == : name = 'wupeiqi' else: name = 'ale ...

  6. Python标准库:内置函数hasattr(object, name)

    Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...

  7. python字符串——"奇葩“的内置函数

      一.前言 python编程语言里的字符串与我们初期所学的c语言内的字符串还是有一定不同的,比如python字符串里的内置函数就比语言的要多得多:字符串内的书写格式也会有一点差异,例:字符串内含有引 ...

  8. python 类(object)的内置函数

    python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...

  9. Python装饰器、内置函数之金兰契友

    装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种.所以也可以理解装饰器是一种特殊的函数.因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展, ...

随机推荐

  1. Ubuntu14.04 gzip failed file too large

    使用gzip解压一个oracle rman备份集时报错:File too large.gizp -d cosp_db_full.tar.gzgzip: cosp_db_full.tar:File to ...

  2. Maven:element '******' cannot have character [children]

    此错误是由于XML文件的解析不正确造成的,因为在一个/某些标签之间存在奇怪和隐藏的字符. 这些字符可能来自网络上的复制粘贴.要解决此问题,请删除标签>标记定义之间的所有空格和换行符,然后将它们放 ...

  3. 【SpringBoot】SpringBoot/MyBatis/MySql/thymeleaf/Log4j整合工程

    工程下载地址:https://files.cnblogs.com/files/xiandedanteng/MMSpringWeb20191027-1.rar 工程目录结构如图: 1.创建工程 有些网文 ...

  4. SQL-W3School-基础:SQL WHERE 语句

    ylbtech-SQL-W3School-基础:SQL WHERE 语句 1.返回顶部 1. WHERE 子句用于规定选择的标准. WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句 ...

  5. android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题

    android  java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题 jav ...

  6. 003-jdk-数据结构-HashMap、HashTable、ConcurrentHashMap、TreeMap、LinkedHashMap、Set

    一.Map概述 Map:“键值”对映射的抽象接口.该映射不包括重复的键,一个键对应一个值. 1.1.HashTable[不常用] 基于“拉链法”实现的散列表. 底层数组+链表实现,无论key还是val ...

  7. IE浏览器URL中的查询条件中包含中文时报404的解决办法

    情况是比如我输入如下URL到IE浏览器: http://localhost:8090/RPT_TYSH_JL_ZD_DETAIL.html?pageIndex=1&year=2018& ...

  8. SQL注入(字符型)

       靶场:sqli-labs @SQLi最重要的一点:别上来就对着输入框注入,完整语句写出来,始终在语句中写完整的,最后把完整的一部分截取出来作为输入 @URL编码:为避免歧义,URL中,如 %2b ...

  9. Linux ps 查看进程

    [root@wang /]# ps aux ps -elf ^C [root@wang /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIM ...

  10. 使用请求包装器RequestWrapper 对博客内容进行编码

    1.写一个文章类 代码如下 package model; public class article { private int id; private String title; private St ...