strip

filter、map、sorted和reduce函数

狂风中的少年 提交于 2020-12-29 19:15:55
内置函数——filter、ma p和reduce filter filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。 例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数: def is_odd(x): return x % 2 == 1 然后,利用filter()过滤掉偶数: >>>list(filter(is_odd, [ 1 , 4 , 6 , 7 , 9 , 12 , 17 ])) 结果: [ 1 , 7 , 9 , 17 ] 利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串: def is_not_empty(s): return s and len(s.strip()) > 0 >>>list(filter(is_not_empty, [ ' test ' , None, '' , ' str ' , ' ' , ' END ' ])) 结果: [ ' test ' , ' str ' , ' END ' ] 注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。 当rm为空时

Jetpack MVVM 实战项目,附带源码+视频,收藏!

非 Y 不嫁゛ 提交于 2020-12-29 17:47:34
从读者的反馈来看,近期大部分安卓开发已跳出舒适圈,开始尝试认识和应用 Jetpack MVVM 到实际的项目开发中。 只可惜,关于 Jetpack MVVM,网上多是 东拼西凑、人云亦云、通篇贴代码 的文章,这不仅不能提供完整的视角来帮助读者,更是给还没入门 Jetpack 的读者 徒添困扰 、起到 劝退 的作用。 好消息是,这一期,给大家带来了 精心打磨的 Jetpack MVVM 最佳实践案例 让人爱不释手的交互设计! 连贯的用户体验 唯一可信源的统一分发 横竖屏布局的无缝切换 项目简介 本人拥有3 年的移动端架构践行和设计经验,领导团队重构的中大型项目多达十数个,对Jetpack MVVM 架构在确立规范化、标准化开发模式以 减少不可预期的错误 所作的努力,有着深入的理解。 在这个案例中,我将为你展示,Jetpack MVVM 是如何 蕴繁于简 地将原本十分容易出错、一出错就会耽搁半天时间的开发工作,通过寥寥的几行代码轻而易举地完成。😉 👆👆👆 划重点! 在这个项目中, 我为 横、竖屏 的情况 分别安排了两套 截然不同的布局 ,并且在生命周期、重建机制、状态管理、DataBinding、ViewModel、LiveData 、Navigation等知识点的帮助下,通过寥寥几行代码,轻松做到 在横竖屏两种布局间 无缝地切换,并且不产生任何 预期外的错误 。 我在多个

Python初学者随笔Week1

ぃ、小莉子 提交于 2020-12-29 11:43:46
Python从入门到放弃   本文主要是描述的是作为初学者对python学习的过程与经历分享,包括一些历程的分享与重要的时间节点记录,对于python学习的笔记与心得。   如果你也是初学者,我们可以一起学习探讨python的知识与技术,欢迎各位博主对我的批评与指导,如果涉及版权等违规的问题,望谅解,小白不懂事。   话不多说,以下开始分享自己个人学习的第一个总结!!! 1.第一个python程序        编译器的安装与环境变量的配置我这里不做赘述,网上很多。   作为第一个python程序,打印一个hello world是必须的,仪式感还是要有的,哈哈。   python的打印是通过调用函数print进行的。   打印Hello World的方式有很多种,以下只列举几种作为例子,供大家参考,程序代码如下: print ( " Hello World! " ) # 或者另外一种标志符 print ( ' Hello World ' ) str = " Hello World " print (str)   以上为三种Hello的打印方式,大家可以试试。 2.print函数的用法 str = " Hello World " # 字符串打印类型,参数传递法 print (str) print ( " %s " %str) # 参数引入法 print ( " Hello World

Python学习之路:一天搞定基础部分

Deadly 提交于 2020-12-29 10:57:46
~代表省略的内容,如变量名、字符串等等 1、Pyhton中比较特别的运算: **:代表指数运算,例如2**3 = 8 //:代表整除运算,这一点和Java不同 2、Python的注释: #:单行注释 """~""":多行注释 3、Python最常见的三种数据类型: int、float、str 再来一个不常见的NoneType的唯一值:None 区分大小写 4、input相关: input输入的东西最后都被转化为字符串 5、强制类型转换: int->str:int(str); str->int:str(int); ... 6、求取字符串长度: len(str); 7、选择结构: if~: ... elif~: ... else: ... 8、For循环: for i in range(n): ... range(fi,en,step-len) 9、import导包: Python叫导入模块 import math,sys,random,os 奇巧淫技:from ~ import * 这样导包可以不加前缀 10、提前结束程序: sys.exit() 要提前导包 import sys 11、print的常用技巧: end: print('hello',end='') print('world') 输出helloworld sep: print('a','b')输出a b print('a

Python学习路线规划,入门自学到精通书籍

*爱你&永不变心* 提交于 2020-12-27 01:01:28
许多人想要零编程基础自学Python,虽然过程很艰难,但需要掌握正确的方向和方法,才能一步步走得更好,学得更快。高效学习是每个人的必须掌握的技巧,建立属于自己的知识体系才能事半功倍,那么该如何规划学习。 Python是当前全球的主流编程语言之一,基于其简洁的语法结构,可以让开发者用更少的代码完成很多复杂的效果开发。诞生近30年来,很多我们耳熟能详的产品都是基于Python开发出来的,国内的豆瓣、知乎和果壳网都是基于Python开发的,而Youtube、Dropbox和Reddit也是诞生于Python的框架之下。 1、先学习一些编程的概念,弄懂编程是怎么回事,然后再了解主流编程语言的应用场景; 2、选择一个方向,如前端、后端、数据等,如果比较迷茫,可以先凭兴趣任选,后续再决定发展方向; 3、选择一门语言,注意并不一定要按照方向来选择,具体可参见下一个问题的解答; 4、寻找合适的教材,这里建议是书籍,看视频的转化率太低,而且很容易进入眼高手低的误区中; 5、学习过程中用笔记或思维导图将知识点全部记录下来,这样你有了自己的转化输入,会加深理解; 6、每学完一小节,立即打开 IDE 把课程代码敲出来,可以仿写或抄写都没关系,但不要逐字抄,不然就是练打字了,先凭印象写,不会的再瞄一眼; 7、每学完一章节,比如函数部分学完了,去网上找例题,比如中国 Mooc 里的编程课程,每节最后都有例题

5秒解决Https请求 未能创建 SSL/TLS 安全通道

亡梦爱人 提交于 2020-12-23 13:36:56
我们在使用代码调用https数据时,有时会出现:未能创建 SSL/TLS 安全通道的问题。这个问题一般是和SSL证书有关,网上有很多解决办法,今天说一种特别的,5秒就能搞定(也有搞不定的时候,要看运气) 一般https的数据,直接把s去掉变成http,也是能访问的。当然,不是所有服务器都这样,有的网址要求严格,换成http是不行的。如果你运气好,换成http就能访问。再不能担心SSL证书啥的了。 再声明一次:不是所有https的访问,都能用http访问的。 来源: oschina 链接: https://my.oschina.net/navisoft/blog/4831524

scrapy爬虫-scrapy-redis分布式

风格不统一 提交于 2020-12-23 03:55:43
1、如何将一个scrapy爬虫项目修改成为一个简单的分布式爬虫项目 官方文档: https://scrapy-redis.readthedocs.io/en/stable/ 只用修改scrapy项目的两个文件就可以了 一个是爬虫组件文件: # -*- coding: utf-8 -*- import scrapy from scrapy_redis.spiders import RedisSpider # 自定义爬虫类的继承类不再是scrapy.spiders下面的爬虫类, # 而是scrapy-redis.spiders下面的爬虫类 class DistributedSpiderSpider(RedisSpider): name = ' distributed_spider ' allowed_domains = [ ' wh.lianjia.com ' ] # 将start_urls替换为redis_key # start_urls = ['https://wh.lianjia.com/ershoufang/'] redis_key = " myspider:start_urls " def parse(self, response): print (response.meta) item = dict() item[ " province " ] = " 湖北 " item[

Android源码解析——Handler、Looper与MessageQueue

♀尐吖头ヾ 提交于 2020-12-22 17:49:58
本文的目的是来分析下 Android 系统中以 Handler、Looper、MessageQueue 组成的异步消息处理机制,通过源码来了解整个消息处理流程的走向以及相关三者之间的关系 需要先了解以下几个基本概念 Handler:主线程或者子线程通过 Handler 向 MessageQueue(消息队列) 发送 Message,以此来触发定时任务或者更新 UI MessageQueue:通过 Handler 发送的消息并非是立即执行的,需要存入消息队列中来依次执行,消息队列中的任务依照消息的优先级高低(延时时间的长短)来顺序存放 Looper:Looper 用于从 MessageQueue 中循环获取消息并将之传递给消息处理者(即消息发送者 Handler 本身)来进行处理,每条 Message 都有个 target 变量用来指向消息的发送者本身,以此把 Message 和其处理者关联起来 互斥机制:可能会有多条线程(1条 UI 线程,n 条子线程)同时向同一个消息队列插入消息,此时就需要有同步机制来保证消息的有序性以避免竞态 先从开发者日常的使用方法作为入口,以此来分析其整个流程的走向 Handler 发送消息的形式主要有以下几个方法,不管其是否是延时任务,其最终调用的都是 sendMessageAtTime() 方法 public final boolean

学生选课系统

我的未来我决定 提交于 2020-12-22 06:44:10
所有的程序开发都是从核心功能 出发的,所以我们在开发的时候首先要完成的总是最主要的功能,以后还要慢慢学会自 己提取“核心的功能”、进行“需求分析”,“程序设计”等工作来保证你们能够顺利成长 为一个优秀的程序员。 核心功能 功能概述 学生选课 需求分析 从“学生选课系统” 这几个字就可以看出来,我们最核心的功能其实只有 选课。 角色 学生、管理员 功能 登陆 : 管理员和学生都可以登陆,且登陆之后可以自动区分身份 选课 : 学生可以自由的为自己选择课程 创建用户 : 选课系统是面向本校学生的,因此所有的用户都应该由管理员完成 查看选课情况 :没个学生可以查看自己的选课情况,而管理员应该可以查看所有学生 的信息 工作流程 登陆 :用户输入用户名和密码 判断身份 :在登陆成果的时候应该可以直接判断出用户的身份 是学生还是管理员 学生用户 :对于学生用户来说,登陆之后有三个功能 1、查看所有课程 2、选择课程 3、查看所选课程 4、退出程序 管理员用户:管理员用户除了可以做一些查看功能之外,还有很多创建工作 1、创建课程 2、创建学生学生账号 3、查看所有课程 4、查看所有学生 5、查看所有学生的选课情况 6、退出程序 程序设计 对于复杂的功能,我们首先就应该想到面向对象编程。而要想将面向对象的程序开发好,就 应该做好类和对象的分析工作。 选课系统简单的划分其实只有两个角色:管理员和学生。

『数据结构与算法』AVL树(平衡二叉树)

廉价感情. 提交于 2020-12-20 14:06:43
GitHub源码分享 微信搜索:码农StayUp 主页地址: https://gozhuyinglong.github.io 源码分享: https://github.com/gozhuyinglong/blog-demos 1. AVL树 AVL(Adelson-Velskii 和 Landis)树是带有平衡条件的 二叉查找树 ,又叫做平衡二叉树。在AVL树中任何节点的两个子树高度差最多为1,所以它又被称为高度平衡树。 如下图中可以清晰的看出,左边的树其根节点左子树高度为3,右子树高度为2,符合AVL树的特点;而右边的树其根节点左子树高度为3,右子树高度为1,不符合AVL树的特点。因此左边的树为AVL树,右边的树不是AVL树。 那么怎样才能保持这种平衡呢? 答案便是在插入或删除节点时,通过对树进行简单的修正来保持平衡,我们称之为 旋转 。 2. 旋转(rotation) 旋转分为单旋转(single rotation)和双旋转(double rotation)。 当左右子树的高度差超过1,并且最高的叶子节点在“外边”时,使用单旋转。 当左右子树的高度差超过1,并且最高的叶子节点在“里面”时,使用双旋转。 而单旋转又分为: 左旋转,即向左旋转。当右子树的高度大于左子树时,进行左旋转。 右旋转,即向右旋转。当左子树的高度大于右子树时,进行右旋转。 双旋转又分为: 左-右双旋转