一、生成器

生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间。

1、 列表生成式,在第二篇博客里面我写了三元运算符,和那个有点像,如果要生成列表[‘01’, ‘02’, ‘03’, ..., ‘10’]怎么做?除了循环还可以用一行语句代替循环生成。

list = [str(i).zeffill() for i in range(1,11)]

  1. 生成器:要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator。

g=(x*x for x in range(1,11))

print(g)

<generator object <genexpr> at 0x1036ff258>#运行结果

创建list和generator的区别仅在于最外层的[]和()。list的元素我们可以一个个打印出,如果要打印generator中的元素需要借助next方法

g=(x*x for x in range(1,11))

print(next(g))

print(next(g))

print(next(g))

print(next(g))

但是generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。可以通过for循环来迭代它,并且不需要关心StopIteration的错误。

g=(x*x for x in range(1,11))

for i in g:

print(i)

二、常用内置函数

# print(all([1,2,3,4,5]))#是否可迭代的对象中的所有元素都为真
# print(any([0,1]))#判断该对象中是否有一个为真
# print(bin(4))#十进制转二进制  二进制的格式为:0b100->1*2+0*1+0*00b为开头标志
# print(bool(''))#将一个对象转换为布尔类型,以空格为对象返回的也是True,没什么大用处
# print(bytearray('abcdefg',encoding='utf-8'))#将字符串转换成byte格式
# print(bytearray())
# print(bytearray(12))
# print(callable('adsf'))#判断该对象是否可被调用,暂时未发现有什么用途
# print(chr(65))#打印数字对应得ascii  A,换句话就是将数字转化成对应的ascii
# print(chr(97))#打印数字对应得ascii  a
# print(ord('m'))#打印字符对应的ascii码值  109
# print(dict(s='m',m='ss'))#将键值对的格式转换成字典
# print(dir('sd'))#打印对象可调用的的方法
# # ###非常实用,当不知道某个对象有哪些方法是可以通过此查看函数
# print(filter(lambda x:x>5,[12,3,12,2,1,2,35]))#把后面的迭代对象根据前面的方法筛选
# print(map(lambda x:x>5,[1,2,3,4,5,6]))
print(random.randint(1,9))#一次性随机取一个数字
print(random.sample(range(1,9),3))#一次性随机取三个数字
print(globals())#返回程序中所有的变量
print(globals())#返回程序内所有的变量,返回的是一个字典
print(locals())#返回局部变量
print(hash('aaa'))#把一个字符串哈希成一个数字
print(hex(111))#数字转成16进制   #16进制格式:0o157
print(max(111,12))#取最大值
print(oct(111))#把数字转换成8进制
print(round(11.11,2))#取几位小数
print(sorted([2,31,34,6,1,23,4]))#排序
dic={1:2,3:4,5:6,7:8}
print(sorted(dic.items()))#按照字典的key排序
print(sorted(dic.items(),key=lambda x:x[1]))#按照字典的value排序

__import__('decorator')#导入一个模块

三、匿名函数

如果这个函数只执行一次的话,那就可以定义一个匿名函数,匿名函数只能处理比较简单的处理逻辑,只能写简单的表达式,不能写循环 判断,比如三元运算符。

匿名函数定义使用lambda关键字,比如说要定义一个函数,它的功能是返回两个数相加和,就可以使用lambda,代码如下:

s = lambda x,y:x+y#冒号号前面的x,y是入参,冒号后面的是返回值

print(s(1,9))#因为函数即变量,如果没有定一个变量把lambda存起来的话,它就不在内存里,没法执行,所有把它放到s这个变量里面

四、json处理

json是一种所有语言中都通用的key-value数据结构的数据类型,很像python中的字典,json处理使用json模块,json模块有下面常用的方法:

import json

dic = {"name":"niuniu","age":18}

print(json.dumps(dic))#把字典转成json串

fj = open('a.json','w')

print(json.dump(dic,fj))#把字典转换成的json串写到一个文件里面

s_json = '{"name":"niuniu","age":20,"status":true}'

print(json.loads(s_json))#把json串转换成字典

fr = open('b.json','r')

print(json.load(fr))#从文件中读取json数据,然后转成字典

五、参数类型

#可变参数,参数组:*email
#1.非必填参数,2.没有限制参数个数
def send_email(*email):
print(email[0])
print('af{}'.format(email))
#print('af%s'%email)
send_email("123","qeqw","342") def run(name,age,*args):
print(name)
print(age)
print('args..',args)
run('Lin','23','jingjing','beijing','234')
#位置参数(参数必填);默认参数(非必填);可变参数,(不必填,不限制参数个数);
#关键字参数 **info
#1.非必填2.没有限制参数个数3.赋值格式必须为key:value4.返回格式:字典格式
def hah(name,sex='男',*args,**info):
print(name)
print(sex)
print(args)
print(info) hah(name='sadf;j',age='dsafj',sex='sadf')
# print('=============11==============')
# ##hah('sadf;j','女',age='dsafj',sex='sadf')
# hah('sadf;j',age='dsafj',sex='sadf')
# print('============22===============')
# hah('lvlv')
# print('===========================')
# hah('sdafas','asdf','sadf')
#递归:函数内部自己调用自己;必须有一个明确的结束条件,否则循环999次报错
# def my2():
# num = input("输入一个偶数:")
# num= int(num)
# if num %2 !=0 :
# print('请输入一个偶数')
# my2()
# my2()

python学习笔记(四):生成器、内置函数、json的更多相关文章

  1. Python学习笔记——常用的内置函数

    一.yield def EricReadlines(): seek = 0 while True: with open('D:/temp.txt','r') as f: f.seek(seek) da ...

  2. python学习笔记六:内置函数

    一.数学相关 1.绝对值:abs(-1) 2.最大最小值:max([1,2,3]).min([1,2,3]) 3.序列长度:len('abc').len([1,2,3]).len((1,2,3)) 4 ...

  3. Python学习(八) —— 内置函数和匿名函数

    一.递归函数 定义:在一个函数里调用这个函数本身 递归的最大深度:997 def func(n): print(n) n += 1 func(n) func(1) 测试递归最大深度 import sy ...

  4. python学习之路-4 内置函数和装饰器

    本篇涉及内容 内置函数 装饰器 内置函数 callable()   判断对象是否可以被调用,返回一个布尔值 1 2 3 4 5 6 7 8 9 10 11 num = 10 print(callabl ...

  5. python学习 day013打卡 内置函数

    本节主要内容: 内置函数: 内置函数就是python给你提供的.拿来直接用的函数,比如print,input等等.截止到python版本3.6.2 python一共提供了68个内置函数.他们就是pyt ...

  6. hive学习笔记之七:内置函数

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. MySQL学习笔记_7_MySQL常用内置函数

    MySQL常用内置函数 说明: 1)可以用在SELECT/UPDATE/DELETE中,及where,orderby,having中 2)在函数里将字段名作为参数,变量的值就是字段所对应的每一行的值. ...

  8. python学习三十八天常用内置函数分类汇总

    python给我们提供丰富的内置函数,不用去写函数体,直接调用就可以运行,很方便快速给我提供开发所需要的函数. 1,查内存地址 id() 变量的内存地址 id() 2,输入输出 input()  pr ...

  9. Prometheus监控学习笔记之PromQL 内置函数

    概述 Prometheus 提供了其它大量的内置函数,可以对时序数据进行丰富的处理.某些函数有默认的参数,例如:year(v=vector(time()) instant-vector).其中参数 v ...

随机推荐

  1. Spring Cloud下使用Feign Form实现微服务之间的文件上传

    背景 ​ Spring Cloud现在已经被越来越多的公司采用了,微服务架构比传统意义上的单服务架构从复杂度上多了很多,出现了很多复杂的场景.比如,我们的产品是个app,支持第三方登录功能,在手机端调 ...

  2. 工作经验(C++篇)

    这篇总结是我正式参加工作后,和同事交流学习得出来的,希望对其他人有帮助,也是自己的脚印 C++编程中,常会使用到类,组长给我们的经验是,一个类写在一个文件中,不要多各类写在一个文件 为了跨平台性,一个 ...

  3. ElasticsearchIllegalArgumentException[failed to find analyzer [ik]]问题解决

    ElasticsearchIllegalArgumentException[failed to find analyzer [ik]] 没有找到分词器 请查看本博客经得住实践的文章:http://bl ...

  4. java基础知识——Java的定义,特点和技术平台

    (作者声明:对于Java编程语言,很多人只知道怎么用,却对其了解甚少.我也是其中一员.所以菜鸟的我,去查询了教科书以及大神的总结,主要参考了<Java核心技术>这本神作.现在分享给大家!) ...

  5. SSM整合笔记

    SSM整合笔记 1,创建maven项目 创建maven项目过程省略 ps:如果创建完maven项目之后项目报错,可能是没有配置Tomcat 2,在pom.xml里面导入相应的jar的依赖 <pr ...

  6. 进程的基础理论、并发(multiprocessing模块)

    一.粘包优化方案 之前我们解决粘包的方式是用struct模块来制作一个报头,但是这个解决的方案是有漏洞的,当我们需要传送的文件大于2g时将会报错.所以我们今天将用json来制作报头. from soc ...

  7. intelij idea相关笔记--持续更新

    一.快捷键: Ctrl+F 文件内查找 Ctrl+Shift+F 全局查找 Ctrl+Shift+N 查找文件 Ctrl+Alt+← 返回上一步 Ctrl+Alt+→ 返回下一步 二.编译相关: 如果 ...

  8. linux中python安装

    1.查看当前环境中是否存在python安装包 [zyj@localhost ~]$ rpm -qa | grep python gnome-python2-gnome--.el6.x86_64 pyt ...

  9. python3基础10(操作日志)

    #!/usr/bin/env python# -*- coding:UTF-8 -*- import logging, time, os # 这个是日志保存本地的路径log_path = " ...

  10. hadoop启动中缺少datanode

    原文链接地址:https://blog.csdn.net/islotus/article/details/78357857 本人测试有效: 首先删除hadoop下的dfs文件(注:本文件不一定在had ...