Python
文章平均质量分 87
及时行樂_
方向:航空数据异常/攻击检测及分析,欢迎私信交流,共同进步~
展开
-
使用爬虫获取四川省各市的降雨量
先看懂这个:使用爬虫获取省份降雨情况,并生成json文件好了,上面那个链接应该看懂了,接下来来看如何获取四川省各城市的降雨量,一样的,我们先看代码。import requestsimport jsonimport reheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/5原创 2021-12-24 17:47:40 · 1179 阅读 · 0 评论 -
使用爬虫获取省份降雨情况,并生成json文件
先上代码import requestsimport jsonimport reheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',}def getCityInfo(url:str) ->(float): response = request原创 2021-12-24 17:42:35 · 977 阅读 · 0 评论 -
使用Python建立RNN实现二进制加法
只有一百行左右代码,应该还是比较好理解的。我会在说的时候贴上代码,也会在最后贴上整个代码,安装numpy库就能够跑。二进制加法这个没啥好说的,就是逢二进一,不知道的就看看计算机组成原理的相关内容吧。RNN主要学两件事,一个是前一位的进位,一个是当前位的加法操作。只告诉当前阶段和前一阶段的计算结果,让网络自己学习加法和进位操作。具体代码既然是神经网络,肯定就非线性的,首先是sigmoid函数,这个要是不清楚,就看看相关博客了解一下。反向传播的时候需要sigmoid函数的导数值,所以把两个函数就直原创 2021-03-06 16:28:38 · 419 阅读 · 1 评论 -
Python 的 assert 语句
什么是 assert?Python 的 assert 语句,可以说是一个 debug 的好工具,主要用于测试一个条件是否满足。如果测试的条件满足,则什么也不做,相当于执行了 pass 语句;如果测试条件不满足,便会抛出异常 AssertionError,并返回具体的错误信息(optional)。它的具体语法是下面这样的:assert_stmt ::= "assert" expression ["," expression]我们先来看一个简单形式的assert expression,比如下面这个原创 2021-02-28 21:47:01 · 1098 阅读 · 1 评论 -
Python中GIL与多线程是什么关系?
问题一:列表 self append 无限嵌套的原理先来回答第一个问题,两个同学都问到了,下面这段代码中的 x,为什么是无限嵌套的列表?x = [1]x.append(x)x[1, [...]]我们可以将上述操作画一个图,便于你更直观地理解:这里,x 指向一个列表,列表的第一个元素为 1;执行了 append 操作后,第二个元素又反过来指向 x,即指向了 x 所指向的列表,因此形成了一个无限嵌套的循环:[1, [1, [1, [1, …]]]]。不过,虽然 x 是无限嵌套的列表,但原创 2021-02-27 16:38:33 · 250 阅读 · 0 评论 -
Python 垃圾回收机制
众所周知,我们当代的计算机都是图灵机架构。图灵机架构的本质,就是一条无限长的纸带,对应着我们今天的存储器。在工程学的演化中,逐渐出现了寄存器、易失性存储器(内存)和永久性存储器(硬盘)等产品。其实,这本身来自一个矛盾:速度越快的存储器,单位价格也越昂贵。因此,妥善利用好每一寸高速存储器的空间,永远是系统设计的一个核心。我们知道,Python 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量;计算完成后,再将结果输出到永久性存储器中。如果数据量过大,内存空间管理不善就很容易出现 O原创 2021-02-27 16:34:23 · 103 阅读 · 0 评论 -
Python GIL(全局解释器锁)
GIL(Global Interpreter Lock,即全局解释器锁)Python 多线程另一个很重要的话题——GIL(Global Interpreter Lock,即全局解释器锁)却鲜有人知,甚至连很多 Python“老司机”都觉得 GIL 就是一个谜。比如下面这段很简单的 cpu-bound 代码:def CountDown(n): while n > 0: n -= 1现在,假设一个很大的数字 n = 100000000,我们先来试试单线程的情况下执行 C原创 2021-02-27 16:28:37 · 253 阅读 · 0 评论 -
Python并发编程之Asyncio
在处理 I/O 操作时,使用多线程与普通的单线程相比,效率得到了极大的提高。你可能会想,既然这样,为什么还需要 Asyncio?比如,多线程运行过程容易被打断,因此有可能出现 race condition 的情况;再如,线程切换本身存在一定的损耗,线程数不能无限增加,因此,如果你的 I/O 操作非常 heavy,多线程很有可能满足不了高效率、高质量的需求。正是为了解决这些问题,Asyncio 应运而生。什么是 AsyncioSync VS Async我们首先来区分一下 Sync(同步)和 A原创 2021-02-27 16:22:52 · 363 阅读 · 0 评论 -
Python并发编程之Futures
正确合理地使用并发编程,无疑会给我们的程序带来极大的性能提升。今天这节课,我就带你一起来学习理解、运用 Python 中的并发编程——Futures。区分并发和并行在我们学习并发编程时,常常同时听到并发(Concurrency)和并行(Parallelism)这两个术语,这两者经常一起使用,导致很多人以为它们是一个意思,其实不然。首先你要辨别一个误区,在 Python 中,并发并不是指同一时刻有多个操作(thread、task)同时进行。相反,某个特定的时刻,它只允许有一个操作发生,只不过线程 / 任原创 2021-02-27 16:17:25 · 218 阅读 · 0 评论 -
Python 协程
什么是协程?协程是实现并发编程的一种方式。一说并发,你肯定想到了多线程 / 多进程模型,没错,多线程 / 多进程,正是解决并发问题的经典模型之一。最初的互联网世界,多线程 / 多进程在服务器并发中,起到举足轻重的作用。我们先从一个爬虫实例出发,用清晰的讲解思路,带你结合实战来搞懂这个不算特别容易理解的概念。之后,我们再由浅入深,直击协程的核心。从一个爬虫说起爬虫,就是互联网的蜘蛛,在搜索引擎诞生之时,与其一同来到世上。爬虫每秒钟都会爬取大量的网页,提取关键信息后存储在数据库中,以便日后分析。爬虫有非常原创 2021-02-27 14:27:15 · 273 阅读 · 0 评论 -
Python中的迭代器和生成器
容器、可迭代对象和迭代器容器这个概念非常好理解。我们说过,在 Python 中一切皆对象,对象的抽象就是类,而对象的集合就是容器。列表(list: [0, 1, 2]),元组(tuple: (0, 1, 2)),字典(dict: {0:0, 1:1, 2:2}),集合(set: set([0, 1, 2]))都是容器。对于容器,你可以很直观地想象成多个元素在一起的单元;而不同容器的区别,正是在于内部数据结构的实现方法。然后,你就可以针对不同场景,选择不同时间和空间复杂度的容器。所有的容器都是可迭代的(原创 2021-02-27 13:50:07 · 204 阅读 · 0 评论 -
Python中的metaclass
Python 中有很多黑魔法,比如今天我将分享的 metaclass。我认识许多人,对于这些语言特性有两种极端的观点。一种人觉得这些语言特性太牛逼了,简直是无所不能的阿拉丁神灯,必须找机会用上才能显示自己的 Python 实力。另一种观点则是认为这些语言特性太危险了,会蛊惑人心去滥用,一旦打开就会释放“恶魔”,让整个代码库变得难以维护。市面上的很多中文书,都把 metaclass 译为“元类”。我一直认为这个翻译很糟糕,所以也不想在这里称 metaclass 为元类。因为如果仅从字面理解,“元”是原创 2021-02-27 12:37:40 · 1105 阅读 · 1 评论 -
Python中的装饰器
装饰器一直以来都是 Python 中很有用、很经典的一个 feature,在工程中的应用也十分广泛,比如日志、缓存等等的任务都会用到。然而,在平常工作生活中,我发现不少人,尤其是初学者,常常因为其相对复杂的表示,对装饰器望而生畏,认为它“too fancy to learn”,实际并不如此。函数 -> 装饰器引入装饰器之前,我们首先一起来复习一下,必须掌握的函数的几个核心概念。第一点,我们要知道,在 Python 中,函数是一等公民(first-class citizen),函数也是对象。我们可原创 2021-02-26 16:48:28 · 209 阅读 · 0 评论 -
Python中的参数传递
什么是值传递和引用传递如果你接触过其他的编程语言,比如 C/C++,很容易想到,常见的参数传递有 2 种:值传递和引用传递。所谓值传递,通常就是拷贝参数的值,然后传递给函数里的新变量。这样,原变量和新变量之间互相独立,互不影响。比如,我们来看下面的一段 C++ 代码:#include <iostream>using namespace std; // 交换2个变量的值void swap(int x, int y) {int temp;temp = x; // 交换x和y的值原创 2021-02-26 16:39:48 · 544 阅读 · 0 评论 -
Python对象的比较、拷贝
已经接触到了很多 Python 对象比较和复制的例子,比如下面这个,判断 a 和 b 是否相等的 if 语句:if a == b: ...再比如第二个例子,这里 l2 就是 l1 的拷贝。l1 = [1, 2, 3]l2 = list(l1)但你可能并不清楚,这些语句的背后发生了什么。比如,l2 是 l1 的浅拷贝(shallow copy)还是深度拷贝(deep copy)呢?a == b是比较两个对象的值相等,还是两个对象完全相等呢?‘==’ VS ‘is’等于(=原创 2021-02-26 16:32:27 · 143 阅读 · 0 评论 -
Python中列表和元组的内部实现是怎样的?
问题一:列表和元组的内部实现有关列表(list)和元组(tuple)的内部实现,想知道里边是 linked list 或 array,还是把 array linked 一下这样的方式?list 的具体结构放在了下面:可以看到,list 本质上是一个 over-allocate 的 array。其中,ob_item 是一个指针列表,里面的每一个指针都指向列表的元素。而 allocated 则存储了这个列表已经被分配的空间大小。需要注意的是,allocated 与列表实际空间大小的区别。列表实际空间大原创 2021-02-26 16:25:20 · 303 阅读 · 0 评论 -
Python的模块化
简单模块化说到最简单的模块化方式,你可以把函数、类、常量拆分到不同的文件,把它们放在同一个文件夹,然后使用 from your_file import function_name, class_name 的方式调用。之后,这些函数和类就可以在文件内直接使用了。# utils.pydef get_sum(a, b): return a + b# class_utils.pyclass Encoder(object): def encode(self, s):原创 2021-02-26 16:19:24 · 174 阅读 · 0 评论 -
Python的面向对象(下):如何实现一个搜索引擎?
我们假设搜索样本存在于本地磁盘上。为了方便,我们只提供五个文件的检索,内容我放在了下面这段代码中:# 1.txtI have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character. I have a dream today.# 2.原创 2021-02-26 00:01:23 · 244 阅读 · 0 评论 -
Python的面向对象(上)
面向对象基础我们先来看一段最基本的 Python 面向对象的应用代码,不要被它的长度吓到。class Document(): def __init__(self, title, author, context): print('init function called') self.title = title self.author = author self.__context = context # __开头的属性是私有属性原创 2021-02-25 18:43:53 · 175 阅读 · 1 评论 -
Python中的匿名函数
匿名函数在实际工作中同样举足轻重,正确地运用匿名函数,能让我们的代码更简洁、易读。匿名函数基础首先,什么是匿名函数呢?以下是匿名函数的格式:lambda argument1, argument2,... argumentN : expression我们可以看到,匿名函数的关键字是 lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式。我们通过几个例子看一下它的用法:square = lambda x: x**2square(3)9这里的匿名函数只输入一个原创 2021-02-25 18:32:45 · 841 阅读 · 1 评论 -
Python中的自定义函数
函数是 Python 程序中不可或缺的一部分。事实上,在前面的学习中,我们已经用到了很多 Python 的内置函数,比如 sorted() 表示对一个集合序列排序,len() 表示返回一个集合序列的长度大小等等。函数基础说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用。我们先来看下面一个简单的例子:def my_func(message): print('Got a message: {}'.format(message))# 调用函数 my_func()my_f原创 2021-02-25 18:25:11 · 1360 阅读 · 1 评论 -
Python中的异常处理
错误与异常通常来说,程序中的错误至少包括两种,一种是语法错误,另一种则是异常。所谓语法错误,你应该很清楚,也就是你写的代码不符合编程规范,无法被识别与执行,比如下面这个例子:if name is not None print(name)If 语句漏掉了冒号,不符合 Python 的语法规范,所以程序就会报错invalid syntax。而异常则是指程序的语法正确,也可以被执行,但在执行过程中遇到了错误,抛出了异常,比如下面的 3 个例子:10 / 0Traceback (most原创 2021-02-25 18:16:15 · 273 阅读 · 1 评论 -
Python的条件与循环
条件语句表示y=∣x∣y=|x|y=∣x∣这个函数。# y = |x|if x < 0: y = -xelse: y = x由于 Python 不支持 switch 语句,因此,当存在多个条件判断时,我们需要用 else if 来实现,这在 Python 中的表达是 elif。语法如下:if condition_1: statement_1elif condition_2: statement_2...elif condition_i: st原创 2021-02-25 18:08:13 · 1117 阅读 · 1 评论 -
Python的输入与输出
输入输出基础最简单直接的输入来自键盘操作。name = input('your name:')gender = input('you are a boy?(y/n)')###### 输入 ######your name:Jackyou are a boy?welcome_str = 'Welcome to the matrix {prefix} {name}.'welcome_dic = { 'prefix': 'Mr.' if gender == 'y' else 'Mrs',原创 2021-02-25 17:55:50 · 280 阅读 · 0 评论 -
Python中的字符串
字符串基础字符串是由独立字符组成的一个序列,通常包含在单引号(’’)双引号("")或者三引号之中(’’’ ‘’'或""" “”",两者一样),比如下面几种写法。name = 'jason'city = 'beijing'text = "welcome to jike shijian"这里定义了 name、city 和 text 三个变量,都是字符串类型。我们知道,Python 中单引号、双引号和三引号的字符串是一模一样的,没有区别,比如下面这个例子中的 s1、s2、s3 完全一样。s1 = '原创 2021-02-24 22:56:35 · 294 阅读 · 0 评论 -
Python中字典和集合的区别与联系
字典(dict)和集合(set)在 Python 被广泛使用,并且性能进行了高度优化,其重要性不言而喻。字典和集合基础字典是一系列由键(key)和值(value)配对组成的元素的集合。python3.7之后,字典底层是2个数组,一个为一维数组,存放hash(key)取余后的值作为数组的索引,对应索引位置存放键值对在二维数组的索引位置。因此二维数组是一个有序的数组。相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。而集合和字典基本相同,唯一的区别,就是集原创 2021-02-24 18:20:34 · 11766 阅读 · 0 评论 -
Python中列表和元组的区别与联系
首先就看看什么是列表?什么是元组?列表和元组,都是一个可以放置任意数据类型的有序集合。在绝大多数编程语言中,集合的数据类型必须一致。不过,对于 Python 的列表和元组来说,并无此要求。列表:l = [1, 2, 'hello', 'world'] l[1, 2, 'hello', 'world']元组:tup = ('jason', 22)tup('jason', 22)区别列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable)。元组是静态的,长原创 2021-02-24 17:47:53 · 2726 阅读 · 0 评论