PYTHON基础篇(四)


  • 内置函数

    • A:基础数据相关(38)
    • B:作用域相关(2)
    • C:迭代器,生成器相关(3)
    • D:反射相关(4)
    • E:面向对象相关(9)
    • F:其他(12)
  • 匿名函数
    • A:匿名函数基础格式
  • 递归函数
    • A:初识递归函数
    • B:递归函数实例

♣一:内置函数

内置函数是python本身携带的功能,当你打开解释器的时候就随之启动存在了,可以直接去调用,经过python这么多年的发展内置函数也在变多,这个可以去python官网去查询内置函数的说明,这些函数都有一个特点就是可以在函数名后面加上()。

内置函数表:

abs() callable() enumerate()   globals()  isinstance()  memoryview() print()   silce() vars()
all() chr()  eval()  hasattr()   issubclass() min()   property() sorted()  zip()
any() classmethod() exec()  hash()   iter() next()   range() staticmethos()  import()
ascii() compoile()  filter()  help()   len() object()   repr() str()   
bin()  delattr()  float()  hex()   list() oct()   reversed() sun()   
bool()  dict()  format()  id()   locals() open()   round() super()   
bytearray()  dir()  frozenset()  input()   map() ord()   set() tuple()   
bytes()  divmod()  getattr()  int()  max()  pow()   setattr() type()   

A:基础数据相关(38)

和数字相关(数据类型)

bool,int,float,complex(复数)

和数字相关(进制转换):

bin(二进制),oct(八进制),hex(十六进制)

和数字相关(数学运算):

abs,divmod(求模取余),round(小数精确),pow(幂运算),sum,min,max

  1. with open('userinfo',encoding='utf8')as f: #打开userinfo文件
  2. l = f.readlines()
  3. page_num = int(input('请输入页码:')) #然用户输入页数
  4. pages,mod = divmod(len(l),5)#判断总页数,有没有剩余的行数
  5. if mod: #如果有剩余的行数+1
  6. pages += 1
  7. if page_num > pages or page_num <=0: #判断用户输入大于页数或者小于等于0的情况
  8. print('输入有误')
  9. elif page_num == pages and mod !=0: #如果用户输入的页是最后一页,且之前有过剩的行数
  10. for i in range(mod):
  11. print(l[(page_num-1)*5 +i].strip()) #只输出这一页上剩余的行数
  12. else:
  13. for i in range(5):
  14. print(l[(page_num-1)*5 +i].strip()) #输入正常的5行

divmod(翻页案例)

数据结构相关(列表和元祖)

list,tuple

数据结构相关(相关内置函数)

reversed,slice

数据结构相关(字符串)

str,format,bytes,bytearray,memoryview,ord,chr,ascii,repr

数据结构相关(数据集合)

dict,set,frozenset

数据结构相关(相关内置函数)

len,enumerate,all,any,zip,filter,map

内置函数里面max,min,filter,map,sorted这几个是最常用的,而且同时也是匿名函数里面常用的。

  1. stockinfo = [
  2. {'name':'德新交运','num':200,'price':21.18},
  3. {'name':'纵横通讯','num':2000,'price':27.19},
  4. {'name':'白云电器','num':100000,'price':11.14},
  5. {'name':'玉龙股份','num':500,'price':6.08}
  6. ]
  7. #计算股票总价
  8. ret = map(lambda dic : {dic['name']:dic['num']*dic['price']},stockinfo)
  9. print(list(ret))
  10. 执行结果
  11. [{'德新交运': 4236.0}, {'纵横通讯': 54380.0}, {'白云电器': 1114000.0}, {'玉龙股份': 3040.0}]

map(算总价)

  1. stockinfo = [
  2. {'name':'德新交运','num':200,'price':21.18},
  3. {'name':'纵横通讯','num':2000,'price':27.19},
  4. {'name':'白云电器','num':100000,'price':11.14},
  5. {'name':'玉龙股份','num':500,'price':6.08}
  6. ]
  7. 求出单价超过20的股票
  8. ret = filter(lambda dic:True if dic['price']>20 else False,stockinfo)
  9. print(list(ret))
  10. 执行结果
  11. [{'name': '德新交运', 'num': 200, 'price': 21.18}, {'name': '纵横通讯', 'num': 2000, 'price': 27.19}]

filter(算单价)

B:作用域相关(2)

  1. locals() #以字典的形式返回本地作用域中的名字
  2. print(locals())
  3. #执行结果
  4. #{'__name__': '__main__', '__doc__': None, '__package__': None, '。。。。。。
  5. def run(args):
  6. a = 'k'
  7. print(locals()) #在函数里面使用会当前位置返回全部的局部变量
  8. run(4)
  9. 执行结果:
  10. {'a': 'k', 'args': 4}

locals()

  1. globals() #以字典的形式返回全局作用域中的名字
  2. print(globals())
  3. #执行结果
  4. #{'__name__': '__main__', '__doc__': None, '__package__': None, '。。。。

globals()

C:迭代器,生成器相关(3)

这个里面包含iter,next,range,这三种方法前面都用到过,不清楚可以查看前面的用法。

D:反射相关(4)

后续补全

E:面向对象相关(9)

后续补全

F:其他(12)

  1. print(dir(()))
  2. 执行结果
  3. ['__add__', '__class__', '__contains__', .......
  4. 查看变量拥有的所有方法

dir()查看对象属性

  1. print(callable(print))
  2. print(callable(range))
  3. a = 1
  4. print(callable(a))
  5. 执行结果
  6. True
  7. True
  8. False
  9. 检查一个对象是否能被调用

callable()

help()查看帮助

import()导入模块

open()操作文件

id()查看内存地址

hash()是否能被hash,这个hash有个好处,例如你有一个文件里面1万个数字,另外一个文件是从原文件拷贝出去的,怎么检查数据是否有差异,就可以用hash,只要两个里面有个数字不一样,两个文件hash出来的结果就不一样。

print()打印

  1. import time
  2. for i in range(0,101,2):
  3. time.sleep(0.2)
  4. char_num = i//2
  5. per = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
  6. print(per,end='',flush=True)
  7.  
  8. 如果有很多进度条处理的建议研究progress bar
  9. http://www.runoob.com/bootstrap/bootstrap-tutorial.html

print()打印进度条

inport()输出

  1. exec('print(123)')
  2. eval('print(123)')
  3. #执行结果
  4. 123
  5. 123
  6. execeval都能执行后面内容是正常的python语句
  7.  
  8. print(exec('4+6+8')) #exec可以看到结果,其实特也执行了,只是没有返回值而已,等同于不加print去计算1+2一样
  9. print(eval('2+6+8')) #eval这个函数有时候能将外面的代码变得简单,但是eval存在安全争议,所以eval只能适合写死的代码部分。
  10. #执行结果
  11. None exec适合处理简单的流程控制
  12. 16
  13.  
  14. code = '''for i in range(3):
  15. print(i*'*')
  16. '''
  17. exec(code)
  18. 执行结果
  19. *
  20. **
  21. 可以看到exec能将注释的代码给执行掉,因为里面是正常的python语句
  22.  
  23. https://blog.csdn.net/hshl1214/article/details/46583149

exec和eval

compile()是将字符串类型的代码编译成计算机能识别的字节码,这个执行需要交给exec和eval来执行。假如你有一段需要重复执行的代码,就可以使用compile一次编译,多次执行,实际用到的很少。

♣二:匿名函数

A:匿名函数基础格式

函数都是def 函数名(位置参数):要使用直接调用函数名即可,匿名函数的基本格式就是在调用的时候加上lambda,函数名 = lambda 参数:返回值的基本格式,如果有多个参数,参数与参数之间,号隔开。而且匿名函数还有一个特点就是参数:后面的返回值,不管多复杂多长,只能写一行。

  1. def cacl(a):
  2. return a**a
  3. print(cacl(10))
  4. cacl=lambda n:n**n
  5. print(cacl(10))
  6. 执行结果
  7. 10000000000
  8. 10000000000

匿名参数格式

  1. # 找字典里面最大值的key
  2. # dic = {'a':10,'b':20,'c':50}
  3. # def func(key):
  4. # return dic[key]
  5. # print(max(dic,key=func))
  6. # # 执行结果
  7. # # c
  8. # print(max(dic,key=lambda k:dic[k]))
  9. # # 执行结果
  10. # # c
  11. # 可以看到我使用匿名函数直接不需要使用我上面的func函数,直接传值进来,func函数三行内容,匿名函数一行解决
  12.  
  13. # a = lambda k:k*2
  14. # b = lambda k:k*3
  15. # x = 2
  16. # x = a(x)
  17. # x = b(x)
  18. # x = a(x)
  19. # print(x)
  20. # 执行结果
  21. #
  22.  
  23. # print(list(map(lambda tup:{tup[0]:tup[1]},zip((('a'),('b')),(('c'),('d'))))))
  24. # 执行结果
  25. # [{'a': 'c'}, {'b': 'd'}]

lambda()的使用

  1. num = [1,2,3,4,5,6,7,8,9]
  2. ret=filter(lambda x:True if x%2==0 else False,num)
  3. #lambda后面可以接列表推导式,三元运算符,一些简单的判断条件
  4. print(list(ret))
  5. 执行结果
  6. [2, 4, 6, 8]

用匿名函数取偶数

a = lambda i:i*1

我们第一眼看上去是发现没有函数名的,在匿名函数里面其实是有函数的名的,整个lambda就是函数,将执行的结果赋值给a,a就是函数名。

匿名函数有个很重要的点就是,要想去实现一些功能,必须结合我们前面学习的内置函数方法,特别是一个简单的功能,自己从头到尾写一个函数结果是能通过内置方法完成的时候,匿名函数就显得尤为重要。

♣三:递归函数

A:初识递归函数

  1. def stock():
  2. print('乐视股份涨幅百分之50')
  3. stock() #递归函数就是在函数内部调用函数本身
  4. stock()
  5. # 执行结果:
  6. # 乐视股份涨幅百分之50
  7. # 乐视股份涨幅百分之50Traceback (most recent call last):
  8. # RecursionError: maximum recursion depth exceeded while calling a Python object
  9. # 可以看到递归函数不加以控制,到后面就会报错,这个是因为递归函数在执行的时候回不停的开辟内存空间,python自己会加以控制
  10. # 上面这个错误意思其实是说超过了递归的最大深度
  11.  
  12. def stock():
  13. print('乐视股份涨幅百分之50')
  14. stock() #递归函数就是在函数内部调用函数本身
  15. print('这是下面一句话')
  16. stock()
  17. 执行结果
  18. 乐视股份涨幅百分之50Traceback (most recent call last):
  19. RecursionError: maximum recursion depth exceeded while calling a Python object
  20. 可以发现一直执行到报错了,还是没有打印函数最后面的那句话,可见递归函数具有一个特性就是在函数内部调用的地方并不会结束。
  21.  
  22. k = 0
  23. def stock():
  24. global k
  25. k+=1
  26. print(k)
  27. stock()
  28. stock()
  29. 执行结果
  30. 998Traceback (most recent call last):
  31. RecursionError: maximum recursion depth exceeded while calling a Python object
  32. 可以看到一直到报错,python内部限制是998
  33.  
  34. import sys
  35. sys.setrecursionlimit(10000)
  36. k = 0
  37. def stock():
  38. global k
  39. k+=1
  40. print(k)
  41. stock()
  42. stock()
  43. 执行结果
  44. 4048
  45. 4049
  46. 可以通过上面的模块方法解除python对递归函数的内存限制,但是我上面给的是10000,但是跑出来最后的结果是4049,这个是和电脑配置有关系,不是python的限制了

递归函数基础格式

递归函数的缺点之一就是占用内存空间,而且我们也知道递归函数有个特性就是python对内存的限制,从几个方面来看,如果你的程序是需要大量循环执行的,递归函数是不适合的。

当然递归函数也是有优点的,他包含了所有函数共有的有点就是可以重复调用和让代码变得简单。

B:递归函数实例

通过上面递归函数的初步认识,我们也能大致描述出来递归函数的使用场景,1:求解一个问题的结果是不能直接拿到的,需要通过解决另外一个问题得到答案,2:而另外一个问题还是需要解决在另外一个问题的答案而得到。

  1. def num(k):
  2. if k == 4:
  3. return 40
  4. elif k>0 and k<4:
  5. return num(k+1)*2
  6. print(num(2))
  7. 执行结果
  8. 160

递归函数

python基础篇(四)的更多相关文章

  1. Python基础篇(四)_组合数据类型的基本概念

    Python基础篇——组合数据类型的基本概念 集合类型:元素的集合,元素之间无序 序列类型:是一个元素向量,元素之间存在先后关系,通过序号进行访问,没有排他性,具体包括字符串类型.元组类型.列表类型 ...

  2. Python基础篇(四)

    Python中的字典类似于Java中的Map,数据以键值对的形式存储. 字典可以用以下的方式使用: >>> phonebook = {"alice":" ...

  3. python基础篇(六)

    PYTHON基础篇(六) 正则模块re A:正则表达式和re模块案例 B:re模块的内置方法 时间模块time A:时间模块的三种表示方式 B:时间模块的相互转换 随机数模块random A:随机数模 ...

  4. python基础篇(五)

    PYTHON基础篇(五) 算法初识 什么是算法 二分查找算法 ♣一:算法初识 A:什么是算法 根据人们长时间接触以来,发现计算机在计算某些一些简单的数据的时候会表现的比较笨拙,而这些数据的计算会消耗大 ...

  5. python基础篇(一)

    PYTHON基础篇(一) 变量 赋值 输入,输出和导入 A:输入 B:输出 C:导入 运算符 A:算数运算符 B:比较运算符 C:赋值运算符 D:位运算符 E:逻辑运算符 F:成员运算符 G:身份运算 ...

  6. python基础篇(二)

    PYTHON基础篇(二) if:else,缩进 A:if的基础格式和缩进 B:循环判断 C:range()函数和len()函数 D:break,contiue和pass语句 for,while循环 函 ...

  7. python基础篇(三)

    PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...

  8. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  9. Python基础篇(set集合)

    Python基础篇(set集合,深浅拷贝) set集合是Python的一个基本类型,一般是不常用.set中的元素是不重复的.无序的里边 的元素必须是可hash的比如int,str,tuple,bool ...

随机推荐

  1. (32)Vue模板语法

    模板语法 文本: <span>Message: {{ msg }}</span> v-once 一次性地插值,当数据改变时,插值处的内容不会更新 <span v-once ...

  2. mybatis-sqlite日期类型对应关系

    1.问题 sqlite数据库 user表,create_time字段,类型DATETIME,设置默认值datetime('now') mybatis,User实体,createTime类型为java. ...

  3. Spring MVC原理及配置

    Spring MVC原理及配置 1. Spring MVC概述 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得 ...

  4. 大数据|linux权限chmod和chown

    一.基础概念 1)rwx含义 示例如下 r:读权限read 4 w:写权限write 2 x:操作权限execute  1 -:无权限 2)drwxr - xr -x 与 - rw - r - - r ...

  5. 咏南跨平台中间件支持LINUX和WINDOWS插件架构

    咏南跨平台中间件支持LINUX和WINDOWS插件架构

  6. Oracle 12c 新特性 --- 新增对数据泵操作的审计跟踪

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/leo__1990/article/details/90199263 概念 Oracle Data P ...

  7. NPAPI绘图和事件处理

    https://developer.mozilla.org/en-US/docs/Plugins/Guide/Drawing_and_Event_Handling 本章介绍如何确定插件实例是窗口化还是 ...

  8. form表单文件上传提交且接口回调显示提交成功

    前端: <form method="post" enctype="multipart/form-data" id="formSubmit&quo ...

  9. Django HttpResponse与JsonResponse

    本文链接:https://blog.csdn.net/mr_hui_/article/details/86498509 我们编写一些接口函数的时候,经常需要给调用者返回json格式的数据,那么如何返回 ...

  10. QEMU支持的网络模式

    网络是现代计算机系统不可或缺的一部分,QEMU也对虚拟机提供丰富的网络支持.qemu-kvm中主要给客户机提供了如下4种不同模式的网络. (1)基于网桥(Bridge)的虚拟网卡 (2)基于NAT(N ...