def

python(三):函数

五迷三道 提交于 2021-01-09 22:30:37
一、函数、名称空间与作用域   1.函数的构成     python有三种层次的抽象:(1)程序可分成多个模块;(2)每个模块包含多条语句;(3)每条语句对对象进行操作。函数大致处于第二层。函数有它的定义格式、参数、逻辑代码块、返回值、以及函数属性五部分组成。 1 def foo(name): # foo: 别名; (),执行规则; name, 形式参数 2 """ doc """ # 说明文档,可以用foo.__doc__获取 3 return name # 返回值 4 print (foo( " foo " )) # 填写形式参数对应的实体参数,并执行foo函数 5 f = foo      # 函数别名可以赋值 6 print (f( " foo " )) View Code   2.函数与方法     函数和方法是有一些区别的,提到方法一般指的是某个对象的方法。因为python自上而下执行,所以函数不可以提前声明。但是方法可以,例如类对象中,可以直接调用后面的方法。但当方法或者函数被调用时,都是函数。 1 class Foo: 2 def pri(self): 3 return foo() 4 def foo(self, name): 5 return name 6 f = Foo() 7 f.pri( " foo " ) View Code   3.名称空间与作用域   

爬虫(十六):scrapy爬取知乎用户信息

二次信任 提交于 2021-01-09 22:15:35
一:爬取思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号信息和被关注信息的关注列表,爬取这些用户的信息,通过这种递归的方式从而爬取整个知乎的所有的账户信息。整个过程通过下面两个图表示: 二:爬虫过程分析 这里我们找的账号地址是: https://www.zhihu.com/people/excited-vczh/answers 下图是大V的主要信息: 然后我们获取他关注的人和关注他的人的信息: 这里我们需要通过抓包分析如果获取这些列表的信息以及用户的个人信息内容 当我们查看他关注人的列表的时候我们可以看到他请求了如下图中的地址,并且我们可以看到返回去的结果是一个json数据,而这里就存着一页关乎的用户信息。 上面虽然可以获取单个用户的个人信息,但是不是特别完整,这个时候我们获取一个人的完整信息地址是当我们将鼠标放到用户名字上面的时候,可以看到发送了一个请求: 我们可以看这个地址的返回结果可以知道,这个地址请求获取的是用户的详细信息: 通过上面的分析我们知道了以下两个地址: 1关注列表:https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*

python学习之函数(三)--函数与过程

≯℡__Kan透↙ 提交于 2021-01-09 20:52:38
1.函数与过程的区别: 有返回值的是函数,没有返回值的是过程; 函数(function):有返回值 过程(procedure):简单特殊,没有返回值 严格来说,python只有函数,没有过程。没有返回值的函数,默认有一个返回值none 2.返回值: 返回值可以是多种类型,也可以返回多个数据,可以用数组打包返回,也可以用元组一起返回,没有类型限制 3.函数变量的作用域: 局部变量(local variable):在函数中定义的参数和变量是局部变量,在函数外是无法使用的,因为函数调用完之后,栈就将函数数据清除,所以外部是无法调用的 全局变量(global variable):作用域是整个模块,整个代码都可以访问,可以在函数中使用,最好不要在函数中修改,如果在函数中修改全局变量,会在函数中,新建一个局部变量,名字和全局变量一致,但是不会影线全局变量的值 def decision(price,rate): final_price = price * rate old_price = 70 return final_price old_price = float( input( "输入原价:")) rate = float( input( "输入折扣:")) print(old_price) print( "折扣价格:",decision(old_price,rate) 4

启发式算法之遗传算法

喜欢而已 提交于 2021-01-09 20:43:53
https://www.cnblogs.com/harrylyx/p/12397319.html 刚开学便被拉去参加了研究生数模比赛,赛题是一个航班排班的优化问题,所以第一反映便是遗传算法,比赛期间三个问题都使用单目标遗传算法,趁着还比较熟悉,特此记录,以便后续复习。本篇文章使用Python进行实现。 启发式算法 启发式算法是一种技术,这种技术使得在可接受的计算成本内去搜寻最好的解,但不一定能保证所得的可行解和最优解,甚至在多数情况下,无法阐述所得解同最优解的近似程度。 就是说这种算法的全局最优解只是理论上可行,大多数情况下都是一个局部最优解。启发式算法用的比较多的有模拟退火算法(SA)、遗传算法(GA)、列表搜索算法(ST)、进化规划(EP)、进化策略(ES)、蚁群算法(ACA)、人工神经网络(ANN)。这里重点介绍一下遗传算法(GA)。 遗传算法准备 遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。 具体来说,在写算法之前,有四个很重要的步骤: 确定编码方式 如何设计编码 确定约束条件 如何实现约束 确定编码方式

N数码问题的启发式搜索算法--A*算法python实现

旧巷老猫 提交于 2021-01-09 18:08:04
一、 启发式搜索: A算法 1)评价函数的一般形式 : f(n) = g(n) + h(n) g(n):从S0到Sn的实际代价(搜索的横向因子) h(n):从N到目标节点的估计代价,称为启发函数(搜索的纵向因子); 特点 : 效率高, 无回溯, 搜索算法 OPEN表 : 存放待扩展的节点. CLOSED表 : 存放已被扩展过的节点. 2)评价函数 f(x) = g(x) + h(x) 当 f(x) = g(x) 时,为宽度优先搜索 当 f(x) = 1/g(x)时,为深度优先搜索 当 f(x) = h(x) 时,为全局优先搜索 比较 f(x)大小,决定节点搜索顺序,即在OPEN表中的顺序 3)Step1: 把初始节点S0放入OPEN表中; Step2: 若OPEN表为空,则搜索失败,退出. Step3: 移出OPEN中第一个节点N放入CLOSED表 中 , 并标以顺序号n; Step4: 若目标节点Sg=N, 则搜索成功,结束. Step5: 若N不可扩展, 则转Step2; Step6: 扩展 N, 生成一组子节点, 对这组子节点作如下处理后, 放入 OPEN表, 按f值 重新排序 OPEN表, 转 Step2; 删除重复节点和修改返回指针处理 . 二、 启发式搜索: A*算法 1)评价函数的一般形式: f(n) = g(n) + h(n) 且 h(n) <= h*(n) g(n

Python学习:11.Python装饰器讲解(二)

杀马特。学长 韩版系。学妹 提交于 2021-01-09 12:21:59
回顾   上一节我们进行了Python简单装饰器的讲解,但是python的装饰器还有一部分高级的使用方式,这一节就针对python装饰器高级部分进行讲解。 为一个函数添加多个装饰器   今天,老板又交给你一个任务,老板说:"之前的装饰器用用起来挺好,但是这次我需要再次添加更多的参数,这个任务就交给你了,好好干。",这种时候,我们就可以针对一个函数使用多个装饰器。 import datetime def hel(func): def inner(*args,** kwargs): r = func(*args,** kwargs) print ( ' bye ' ) return r return inner def hel1(func): def inner(*args,** kwargs): print ( ' start time:%s ' % datetime.datetime.now()) r = func(*args,** kwargs) print ( ' end time:%s ' % datetime.datetime.now()) return r return inner @hel1 @hel def f1(name): print ( ' hello ' ) print (name) name = ' alexsel ' f1(name) 执行结果:

基于django的校园信息管理系统

荒凉一梦 提交于 2021-01-09 10:34:49
本项目基于django,前端使用了新url和模态对话框两种方式,使用了jquery和ajax技术,后端使用了MySQL,将数据存入数据库,进行增删改查等操作。 本项目可以实现教师管理、班级管理、学生管理,在后台管理页面上,可以方便地进入每一个模块进行管理。 url部分 1 """ database_do URL Configuration 2 3 The `urlpatterns` list routes URLs to views. For more information please see: 4 https://docs.djangoproject.com/en/2.2/topics/http/urls/ 5 Examples: 6 Function views 7 1. Add an import: from my_app import views 8 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 Class-based views 10 1. Add an import: from other_app.views import Home 11 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12

RabbitMQ入门:发布/订阅(Publish/Subscribe)

懵懂的女人 提交于 2021-01-09 07:46:40
在前面的两篇博客中 RabbitMQ入门:Hello RabbitMQ 代码实例 RabbitMQ入门:工作队列(Work Queue) 遇到的实例都是 一个消息只发送给一个消费者(工作者) ,他们的消息模型分别为(P代表生产者,C代表消费者,红色代表队列): 这次我们来看下将 一个消息发送给多个消费者(工作者) ,这种模式一般被称为“发布/订阅”模式。其工作模型为(P代表生产者,X代表Exchange(路由器/交换机),C代表消费者,红色代表队列): 我们发现,工作模型中首次出现路由器,并且每个消费者有单独的队列。生产者生成消息后将其发送给路由器,然后路由器转送到队列,消费者各自到自己的队列里面获取消息进行消费。在实际的应用场景中, 生产者一般不会直接将消息发送给队列,而是发送给路由器进行中转 ,Exchange必须清楚的知道怎么处理收到的消息:是将消息发送到一个特定队列还是多有队列,或者直接废弃消息。这种才符合 RabbitMQ消息模型的核心思想 。 接下来我们详细展开今天的话题: 一、Exchange Exchange在我们的工作模型中首次出现,因此需要详细介绍下。 Exchange分为4种类型: Direct:完全根据key进行投递的,例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。 Topic

Python 小试牛刀,Django详细解读,让你更快的掌握它!!!

自闭症网瘾萝莉.ら 提交于 2021-01-09 06:47:59
一、MVC和MTV模式 MVC:将web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求。 Django的MTV模型本质上与MVC没有什么差别,也是各组件之间为了保持松耦合关系,只不过定义上有些不同,Django的MTV分别是:   • Model(模型):负责业务对象与数据库的对象(ORM)   • Template(模板):负责如何把页面展示给用户   • View(视图):负责业务逻辑,并在适当的时候调用Model和Template 二 Django的流程和命令行工具 1 django 2 # 安装: pip3 install django 3 4 添加环境变量 5 6 # 1 创建project 7 django- admin startproject mysite 8 9 --- mysite 10 11 --- settings.py 12 --- url.py 13 --- wsgi.py 14 15 ---- manage.py(启动文件) 16 17 # 2 创建APP 18 python mannage.py startapp app01 19 20 # 3 settings配置 21

python3练习100题——019

╄→гoц情女王★ 提交于 2021-01-09 06:43:48
原题链接:http://www.runoob.com/python/python-exercise-example19.html 题目: 一个数如果恰好等于它的 因子 之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。 我的代码: def fun(): for num in range(1,1001 ): l =[1 ]       #1不传入循环,直接输出 total =1     n = num for i in range(2,n ):    #上限不能到n          if n%i== 0: l.append(i) total += i if total== num: print ( " %d is a perfect number\n " % num) print (l) 思考: 题目分析题到了,这道题与014——分解质因数的题可以参考。但是实际还是有区别。 这次要的是一个数的所有因数,而不是质因数,所以只用一个循环从2到n-1找到所有的因数即可。 来源: oschina 链接: https://my.oschina.net/u/4418707/blog/3946596