def

Python-面向网络编程-socket原理

不想你离开。 提交于 2021-01-15 19:12:08
socket   整个计算机网络是由协议构成,想要通信必须遵守对应的协议,如Web中的http协议、传输协议TCP和UDP等等。在网络工程师的眼中,可能现在网络上的一切都是socket,一切皆socket,我们一般接触到的是应用层应用程序,本质上两个应用想通信,则必须通过socket实现通信,socket直接和传输层后下面的底层网络协议打交道(socket本身让我们直接与TCP打交道),底层socket已经建立好则可以互相通信。互联网现在主流的网络层协议是IPv4,IPv6是下一代网络层协议但不主流,IPv6解决的是IPv4地址耗尽的问题,其实为了应对IPv4资源少的问题产生了局域网和网关。 网络模型   其发展过程,是一次解决需求的迭代过程。当计算机刚发明并投入使用,两台计算机想实现点对点通信,于是产生了数据链路层,当加入更多的计算机实现通信的时候,就产生了网络层,实现通信还不能满足需求,需要通过网络传输数据,则产生了传输层,对于可靠性的需求产生了TCP和UDP两种传输协议,不同的用户有不同的需求,于是应用层就被划分出来了。用户在应用层使用各种app,数据依次往下组包直至物理层发送到网络,接收数据则往上拆包得到最终数据。本质上是需求推动了网络层次的产生,当前把网络七层模型中的会话、表示、应用层统称为应用层。   应用层      文件传输、文件服务、电子邮件 http ftp

python 生成器、生成器函数、推导式、生成器表达式

老子叫甜甜 提交于 2021-01-15 06:21:12
一、生成器    生成器的本质就是迭代器    生成器的特点和迭代器一样,取值方式和迭代器一样。(__next__(),send():给上一个yield传值)    生成器一般由生成器函数或者生成器表达是来创建 二、生成器函数    和普通函数没有区别。里面yield 的函数就是生成器函数    生成器函数在执行的时候,默认不会执行函数体,返回生成器    通过生成器的__next__() 分段执行这个函数 def fun(): print("aaaa") yield 1 #返回数据 print("bbbb") yield 2 gen = fun() #拿到生成器 gen.__next__() #执行函数,执行到下一个yield gen.__next__() #继续执行,执行到下一个yield   send() 给上一个yield 传值,不能在开头(没有上一个yield),最后一个yield也不能用send() def eat(): print("菜单") a = yield "馒头" print('a=',a) b = yield "鸡蛋灌饼" print('b=', b) c = yield "手抓饼" print('c=',c) yield 'end' gen =eat() ret1 = gen.__next__() print(ret1) ret2 = gen.send(

python 哈希表实现简单python字典

梦想的初衷 提交于 2021-01-15 03:39:48
1 class Array(object): 2 3 def __init__ (self, size = 32, init = None): 4 self._size = size 5 self._items = [init] * size 6 7 8 def __getitem__ (self, index): 9 return self._items[index] 10 11 12 def __setitem__ (self, index, value): 13 self._items[index] = value 14 15 16 def __len__ (self): 17 return self._size 18 19 20 def clear(self, value = None): 21 for i in range(self,_items): 22 self._items[i] = value 23 24 25 def __iter__ (self): 26 for item in self._items: 27 yield item 28 29 30 31 32 class Slot(object): 33 """ 34 定义一个哈希表数组的槽 35 注意:一个槽有三种状态 36 1. 从未被使用过,HashMap.UNUSED。 此槽没有被使用和冲突过

贪吃蛇C语言

喜你入骨 提交于 2021-01-14 16:05:26
http://groups.tianya.cn/post-233945-a26c77a21b324ae5952434f366b8504c-1.shtml http://groups.tianya.cn/post-233945-affb7a12483a4ae3a5d5fa0a979cf256-1.shtml http://groups.tianya.cn/post-233945-69147112bfc84a4ab7fe4e24245e71fc-1.shtml http://groups.tianya.cn/post-233945-b7f4bc30917a48b9a1ce6ad37e095a4c-1.shtml http://groups.tianya.cn/post-233945-f89157e886864b77997b83469e2236f7-1.shtml http://groups.tianya.cn/post-233945-ebf45fbb7f104197bc00a7f2b0156e57-1.shtml http://groups.tianya.cn/post-233945-75deb3d90b35440da4f0bf53b68577a2-1.shtml http://groups.tianya.cn/post-233945

数据采集与解析案例之:2020博客之星评选

别来无恙 提交于 2021-01-14 13:41:19
数据采集与解析案例之:2020博客之星评选 一、博客之星 2020年的博客之星已经开始啦,根据规则投票会持续一段时间,但是在活动页面并未有实时排行榜,本文将用爬虫实现数据的采集以及排序,可以直接查看到评比排行~ 同时,在下也有幸入选博客之星TOP 200,如果你手里还有多余的票票,请不要错过投票的机会,点击阅读原文即可为小猪投上宝贵的N票,不胜感激 二、实现思路 1. 确定数据源 首先我们需要在页面上获得数据,由于每次刷新数据都是会变化的,所以一般都是Ajax请求,我们需要用到开发者工具来查看网络请求。 如何呼出开发者工具 在进行页面分析的时候,浏览器的开发者工具是不必可少的,笔者以蓝狐(火狐浏览器开发版)为例。对于其他的浏览器,主要都是基于Gecko(火狐内核)、Blink(Chrome内核)、Webkit(Safari内核)、Trident(IE内核)来套的壳子,所以整体的呼出方式不会差别很大。 首先我们在 页面空白处点击右键 -> 点击 检查元素 寻找数据源 页面链接:https://bss.csdn.net/m/topic/blog_star2020,打开后切换至网络栏目,点击重新载入: 可以按照类型排序,过滤掉一些静态资源的请求。发现数据来自于一个 getUser 的接口,返回的数据可以使用JSON格式进行解析。 2. 实现步骤 找到数据源以后,步骤就比较明确了

七、PyQT5控件——QSlider,QSpinBox

浪尽此生 提交于 2021-01-14 11:02:04
一、Qslider QSlider是一个滑动条,可以设置成水平或垂直放置。最常用的方法允许用户在某一范围内互动该滑块,并将滑块的位置转换成一个整数值(int类型),这种方式可以在某一个范围内平顺的变动,并触发valuechangd信号,产生相应变化。但QSlider能发射的信号并不局限于这一种: valuechanged。滑块位置变动时发射此信号; sliderPressed。当用户按下滑块时就会发射该信号; sliderMoved。当用户拖动滑块时发射信号; sliderReleased。用户释放滑块时发射该信号。 1 import sys,os 2 from PyQt5.QtWidgets import QWidget,QSlider,QApplication,QLabel,QVBoxLayout 3 from PyQt5.QtGui import QIcon 4 from PyQt5.QtCore import Qt 5 6 path = os.path.dirname(os.path.dirname(os.path.dirname( __file__ ))) 7 8 class MyWindow(QWidget): 9 10 def __init__ (self): 11 super(). __init__ () 12 self.initUI() 13 14 def

论c++/java/c 与python的语法上的区别

社会主义新天地 提交于 2021-01-14 07:40:19
复习C/C++、Java语言知识,结合Python语言知识,结合实例代码说明C/C++、Java与Python的区别(综述题)。 要求: 至少列出十点以上区别; 要求每点说明时要结合示例代码; 严禁抄袭! 1.c语言有指针,其余的没有指针 c指针代码如下: void swap(int * m, int * n){ int temp; temp = *m; *m = *n; *n = temp; } 2.c/c++/java 对变量的定义很严格各种类型有严格的定义 c/c++/java 定义如下: int a=0; 而python直接: a=0 即可 3.在c/c++/java中每段代码之后要有;分开 例如: int a=0; 而python直接: a=0 即可 4.在c/c++/java中的for循环有括号包括 例如: for(int a=0;a<100;a++) { int b=a; } 而在python中没有这样的结构,例如: for iterating_var in sequence: statements(s) 5.在c/c++c/java中两行代码之间可以不严格遵循错位的结构,例如: for(int a=0;a<100;a++) { int b=a; } 而在python中没有错位的话,会进行报错 6.在C语言中,声明全局变量,如果值是恒定的,那么可以直接用

DRF序列化和反序列化(一:Serializer)

泄露秘密 提交于 2021-01-14 06:51:46
一:表关系如下 from django.db import models # Create your models here. __all__=['Book','Publisher','Authon'] class Book(models.Model): title =models.CharField(max_length=32,verbose_name='图书名称') CHOICES=((1,'python'),(2,'go'),(3,'linux')) category=models.IntegerField(choices=CHOICES,verbose_name='图书类别') pub_time=models.DateTimeField(verbose_name='出版日期') authon=models.ManyToManyField('Authon') publisher=models.ForeignKey(to='Publisher',on_delete=None) def __str__(self): return self.title class Authon(models.Model): name= models.CharField(max_length=32, verbose_name='作者姓名') def __str__(self): return

LeetCode 45. 跳跃游戏 II | Python

拜拜、爱过 提交于 2021-01-14 06:31:59
45. 跳跃游戏 II 题目来源: https://leetcode-cn.com/problems/jump-game-ii 题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 说明: 假设你总是可以到达数组的最后一个位置。 解题思路 思路:贪婪算法 首先,先注意题意的 说明 部分【 假设你总是可以到达数组的最后一个位置 】。这里只需要考虑,题目中所给出的数组,是一定能够到达数组的最后一个位置。 这题要求与之前 55. 跳跃游戏 并不相同,55 题要求的返回是否能够到达最后一个位置。如果用 55 题的反例来论证本题意义不大,若觉得有必要,也可以在无法到达时返回特定的值用以标记,例如 0。 现在考虑如何去求得到达最后位置的最小跳跃次数? 在这里,我们考虑使用正向去找可到达的最远位置。这里以示例 1 为例,[2,3,1,1,4],索引为 0 的位置,这里元素值为 2,表示该位置能够跳跃到达的位置为后续两个位置,如下图所示红色部分: 在这里,索引为 1 的位置中,元素值值为 3

Python format 格式化函数。

眉间皱痕 提交于 2021-01-14 06:24:07
Python format 格式化函数 Python 字符串 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。 基本语法是通过 {} 和 : 来代替以前的 % 。 format 函数可以接受不限个参数,位置可以不按顺序。 实例 >>> " {} {} " . format ( " hello " , " world " ) # 不设置指定位置,按默认顺序 ' hello world ' >>> " {0} {1} " . format ( " hello " , " world " ) # 设置指定位置 ' hello world ' >>> " {1} {0} {1} " . format ( " hello " , " world " ) # 设置指定位置 ' world hello world ' 也可以设置参数: 实例 #!/usr/bin/python # -*- coding: UTF-8 -*- print ( " 网站名:{name}, 地址 {url} " . format ( name = " 菜鸟教程 " , url = " www.runoob.com " ) ) # 通过字典设置参数 site = { " name " : " 菜鸟教程 " , " url " : " www.runoob