def

python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)

喜欢而已 提交于 2021-02-17 05:48:41
毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一、默认参数 def multiply1(x, y): return x * y print("multiply1:", multiply1(2, 3)) 输出 multiply1: 6 ,这是最平淡无奇的函数写法。 python支持默认参数,比如:如果想让1个数自动乘10,又不想定义新的函数,上面的代码,可以改成: def multiply1(x, y=10): return x * y print("multiply1:", multiply1(2, 3)) print("multiply1:", multiply1(2)) 输出 multiply1: 6 multiply1: 20 另外,调用函数时,除了按顺序依次给值外,还可以“显式”的命名传值,示例如下: print("multiply1:", multiply1(x=2, y=4)) print("multiply1:", multiply1(y=3, x=5)) print("multiply1:", multiply1(x=4)) 输出: multiply1: 8 multiply1: 15 multiply1: 40 显式指定参数名称后,顺序就不重要了。 二、可变参数(tuple)

协程

不问归期 提交于 2021-02-17 01:58:16
之前都提到了几次协程,那么今天就来具体看看到底什么是协程,为什么要有协程,python如何实现协程的。 通过对生成器的学习,我们知道,yield val这行代码会给调用next(gen)的客户端产出一个值,然后暂停,把执行权限移交到客户端那里,等到下次客户端再次调用next(gen)的时候,再从yield后面的代码处接着执行,感觉是不是很像两个人在协作着完成一件事情? 没错,协程就是这样的,通过多个组件之间的互相协作,来完成某件事情。在python中,从语法上看,协程跟生成器类似,都是定义体中包含yield关键字的函数。但是,在协程中,yield通常出现在表达式的右边(如 ret = yield val),可以产出值,也可以不产出,如果yield后面没有表达式,那么生成器产出None,协程通常会从调用方接收数据,调用方把数据提供给协程的方法就是.send(data)方法。通常而言,调用方会把值推送给协程。 yield关键字甚至还可以不接收或者传出数据。不管数据如何流动,yield都可以看成是一种控制流程的工具,利用它可以实现协作式任务,这就是协程的工作流程模型。 生成器如何变成协程的 协程指的是一个过程,这个过程与调用方协作,产出由调用方提供的值。 除了.send()方法外,还有.thow(),.close()方法。 .send()   和next()类似,只是.send()方法

python学习之老男孩python全栈第九期_day014作业

大兔子大兔子 提交于 2021-02-17 00:02:47
0. 默写 a. 生成器函数 获取移动平均值例子: 1 def init(func): 2 def inner(*args,** kwargs): 3 ret = func(*args,** kwargs) 4 ret. __next__ () 5 return ret 6 return inner 7 @init 8 def average(): 9 average = 0 10 count = 0 11 sum = 0 12 while 1 : 13 num = yield average 14 sum += num 15 count += 1 16 average = sum/ count 17 ret = average() 18 print (ret.send(10 )) 19 print (ret.send(20)) View Code b. 生成器表达式 egg = ( ' 鸡蛋%s ' %i for i in range(10 )) for i in egg: print (i) View Code 作业 1. 通读迭代器生成器博客,将所有实例都敲一次,务必把代码的执行过程搞明白 2. 处理文件:用户指定要查找的文件和内容 将文件中包含要查找内容的每一行都输出到屏幕 1 def check_file(): 2 with open( ' a.txt '

Python(1)自动发送邮件

为君一笑 提交于 2021-02-16 23:42:49
python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。 smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。 email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。 1.smtplib模块 import smtplib smtp = smtplib.SMTP() smtp.connect( ' smtp.163.com,25 ' ) smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() 2.email模块 from email.mime.text import MIMEText from email.header import Header from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart 我们必须把Subject,From

scala的隐式转换

感情迁移 提交于 2021-02-16 16:32:38
 隐式转换的本质:可以减少从一个类型显式转换成另一个类型的需要。 1.隐式规则  隐式定义:指允许编译器插入程序以解决类型错误的定义。隐式转换受一下规则约束: 1)标记规则:只有标记为implicit的定义才可用。 2)作用域规则:被插入的隐式转换必须是当前作用域的单个标识符,或者跟隐式转换的源类型或目标类型有关联。也就是说编译器会从隐式转换的源类型或目标类型的伴生对象中查找隐式定义。 3)每次一个原则:每次只能有一个隐式定义被插入。 4)显式优先原则:只要代码按编写的样子能通过类型检查,就不尝试隐式定义。 2.隐式定义的使用  Scala总共会有3个地方会使用到隐式定义:转换到一个预期的类型;对成员转换接收端(字段、方法);隐式参数。 2.1隐式转换到一个预期的类型  当方法的参数类型是X的时候,如果想要把类型Y的参数传进去,可以使用使用隐式定义。 class Food(val name:String) {} object Food { implicit def string2Food1(s:String) = new Food(s) } class Cat { implicit def string2Food2(s:String) = new Food(s) def eat(food:Food) = println(s"cat eat ${food.name}" ) }

机器学习进阶-案例实战-图像全景拼接-书籍SIFT特征点连接 1.cv2.drawMatches(对两个图像的关键点进行连线操作)

浪尽此生 提交于 2021-02-16 16:30:49
1.cv2.drawMatches(imageA, kpsA, imageB, kpsB, matches[:10], None, flags=2) # 对两个图像关键点进行连线操作 参数说明:imageA和imageB表示图片,kpsA和kpsB表示关键点, matches表示进过cv2.BFMatcher获得的匹配的索引值,也有距离, flags表示有几个图像 书籍的SIFT特征点连接: 第一步:使用sift.detectAndComputer找出关键点和sift特征向量 第二步:构建BFMatcher()蛮力匹配器,bf.match匹配sift特征向量,使用的是欧式距离 第三步:根据匹配结果matches.distance对matches按照距离进行排序 第四步:进行画图操作,使用cv2.drawMatches进行画图操作 import cv2 import numpy as np # 读入图片 imgA = cv2.imread( ' box.png ' , 0) imgB = cv2.imread( ' box_in_scene.png ' , 0) def cv_show(img, name): cv2.imshow(name, img) cv2.waitKey(0) cv2.destroyAllWindows() # 第一步:构造sift

机器学习进阶-案例实战-图像全景拼接-图像全景拼接(RANSCA) 1.sift.detectAndComputer(获得sift图像关键点) 2.cv2.findHomography(计算单...

倖福魔咒の 提交于 2021-02-16 14:01:04
1. sift.detectAndComputer(gray, None) # 计算出图像的关键点和sift特征向量 参数说明:gray表示输入的图片 2.cv2.findHomography(kpA, kpB, cv2.RANSAC, reproThresh) # 计算出单应性矩阵 参数说明:kpA表示图像A关键点的坐标, kpB图像B关键点的坐标, 使用随机抽样一致性算法来进行迭代,reproThresh表示每次抽取样本的个数 3.cv2.warpPespective(imageA, H, (imageA.shape[1] + imageB.shape[1], imageA.shape[0])) # 获得根据单应性矩阵变化后的图像 参数说明:image表示输入图像,H表示单应性的矩阵,(imageA.shape[1] + imageB.shape[1], imageA.shape[0])表示矩阵变化后的维度 4. cv2.line(imageA, kpsA, imageB, kpsB, (0,0,255), 2) 进行画出直线的操作 参数说明:imageA和imageB表示输入图片, kpsA和kpsB表示关键点的坐标(x, y) ,(0, 0, 255)表示颜色, 2表示直线的宽度 RANSAC算法(随机抽样一致性算法), 对于左边的图

day 73 Django基础八之cookie和session

徘徊边缘 提交于 2021-02-16 13:25:59
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪   我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束。在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中。 客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束。      在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下: 请求银行主页; 请求登录(请求参数是用户名和密码); 请求转账(请求参数与转账相关的数据); 请求信誉卡还款(请求参数与还款相关的数据)。   在这上会话中当前用户信息必须在这个会话中共享的,因为登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。而web中这种能力的实现就要依靠cookie和session 二 cookie   Cookie的由来     大家都知道HTTP协议是无状态的。

基于物品的协同过滤实现(javaweb+python)

China☆狼群 提交于 2021-02-16 13:25:17
基于物品的推荐算法以及流程(以电商网站为基准) 例如,用户喜欢百雀羚的爽肤水,那么系统将会寻找与爽肤水、百雀羚类似的物品推荐给用户。 算法流程: 1.构建用户–>物品的倒排; 2.构建物品与物品的同现矩阵; 3.计算物品之间的相似度,即计算相似矩阵; 4.根据用户的历史记录,给用户推荐物品; 数据库中数据如下: 注:user_id为用户id good_id为用户喜欢的商品id python代码: # !/usr/bin/python # -*- coding: UTF-8 -*- from math import sqrt import operator # 1.构建用户-->物品的倒排 def loadData(files): data = {}; for line in files: user,score,item =line.split( " , " ); data.setdefault(user,{}); data[user][item] = score; print ( " ----1.用户:物品的倒排---- " ) print (data) return data # 2.计算 # 2.1 构造物品-->物品的共现矩阵 # 2.2 计算物品与物品的相似矩阵 def similarity(data): # 2.1 构造物品:物品的共现矩阵 N={}; #

Pytest学习之use fixtures

两盒软妹~` 提交于 2021-02-16 13:23:11
'''当用例需要调用fixture时,前面讲到可以直接在用例里加fixture参数,如果一个测试class都需要用到fixture,每个用例都去传参,会比较麻烦,这个时候, 可以在class外面加usefixtures装饰器,让整个class都调用fixture''' ''' 调用fixture的三种方法 1.函数或类里面方法直接传fixture的函数名称 2.使用装饰器@pyets.mark.usefixtures()修饰 3.autouse=True自动使用 ''' '''用例传fixture参数 方法一:先定义start功能 用例全部传start参数,调用该功能 ''' import time import pytest @pytest.fixture(scope="function") def start(request): print("\n-----开始执行function-----") def test_a(start): print("-----用例a执行-----") class Test_aaa(): def test_o1(self,start): print("----用例01---------") def test_02(self,start): print("----用例02---------") if __name__ == '__main__':