Python3.6 操作符重载

󰃭 2017-08-24

1. 基本加减乘除、比较运算符重 方法 重载描述 __add__ 加法 __sub__ 减法 __mul__ 乘法 __floordiv__ 整除除法 __le__ 小于等于 __lt__ 小于 __eq__ 等于 __ge__ 大于等于 __gt__ 大于 1.1 运算符重载示例 #!/usr/bin/env python # coding: utf-8 class MyObj(int): def __init__(self, value): self._value = value def __add__(self, other): return (self._value + other._value) * 3 def __sub__(self, other): return self._value - other._value def __mul__(self, other): return self._value * self._value def __floordiv__(self, other): return 'floor_div haha' def __eq__(self, other): print('==') return self.

Continue reading 


Python语法规则浅谈

󰃭 2017-08-24

语法规则 注释 ''' u多 3行 v注 3释 ''' ''' u3v3单行注释 ''' 变量 1)(规则同c里面的规则相同) 模块名: 小写字母,单词之间用_分割 ad_stats.py 包名: 和模块名一样 类名: 单词首字母大写 AdStats ConfigUtil 全局变量名(类变量,在java中相当于static变量): 大写字母,单词之间用_分割 NUMBER COLOR_WRITE 普通变量: 小写字母,单词之间用_分割 this_is_a_var 实例变量: 以_开头,其他和普通变量一样 _price _instance_var 私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 __private_var 专有变量: __开头,__结尾,一般为python的自有变量,不要以这种方式命名 doc class 普通函数: 和普通变量一样: get_name() count_number() ad_stat() 变量命名规则 1、变量名可以包括字母、数字、下划线,但是数字不能做为开头。例如:name1是合法变量名,而1name就不可以。 2、系统关键字不能做变量名使用 3、除了下划线之个,其它符号不能做为变量名使用 4、Python的变量名是除分大小写的,例如:name和Name就是两个变量名,而非相同变量哦。 2)关键字 以上通过help()函数的keywords可以查看,大家可以试试。 基本数据类型 1)数字 age=3 2)字符串 name="u3v3" name='u3v3' name="""u3v3""" 3)布尔值(TRUE,False) 流程控制和缩进 if底下的缩进必须保持一致 if 条件: 内容1 内容2 else: 内容3 内容4

Continue reading 


【Python从零开始】第八回_Python基础之"字符串的操作(去除空格以及大小写转换)"

󰃭 2017-08-24

关于去除空格 1)str.strip():删除字符串两边的指定字符,括号的写入指定字符,默认为空格 >>> a = ' u3v3 ' >>> b=a.strip() >>> print(b) u3v3 2)str.lstrip():删除字符串左边的指定字符,括号的写入指定字符,默认为空格 >>> a = ' u3v3 ' >>> b=a.lstrip() >>> print(b) hello #右边空格可能看的不是很明显 3)str.rstrip():删除字符串右边指定字符,默认为空格 >>> a = ' u3v3 ' >>> b=a.rstrip() >>> print(b) hello#左边空格可能看的不是很明显 关于字符串中字母大小写转换 1)lower()转换为小写 >>> a='U3V3' >>> print(a.lower()) u3v3 2)upper()转换为大写 >>> a='u3v3' >>> print(a.upper()) U3V3 3)swapcase()大小写互换 >>> a='u3V3' >>> print(a.swapcase()) U3v3 4)capitalize()首字母大写 >>> a='u3V3' >>> print(a.capitalize()) U3V3

Continue reading 


【Python从零开始】第七回_Python基础之"while&for循环"

󰃭 2017-08-24

介绍循环 关于循环while 关于循环For 介绍循环 所谓循环就是多次重复执行某些类似的操作,这个操作一般不是完全一样的操作,而是类似的操作。都有哪些操作呢?这个例子太多了。 我们想查看手机上的照片,背后的程序需要将照片一张张展示给我们,我们可以反复查看。 播放音乐,我们听网易云音乐,循环播放你肯定经常使用吧。 查看消息,我们浏览朋友圈消息,背后程序将消息一条条展示给我们。 循环除了用于重复读取或展示某个列表中的内容,日常中的很多操作也要靠循环完成。 在文件中,查找某个词,程序需要和文件中的词逐个比较(当然可能有更高效方式,但也离不开循环)。 使用Excel对数据进行汇总,比如求和或平均值,需要循环处理每个单元的数据。 群发祝福消息给好友,程序需要循环给每个好友发。 Python中的循环语句有 for 和 while。今天我们先来说下while。 关于循环while while结构循环为当型循环(when type loop),一般用于不知道循环次数的情况。维持循环的是一个条件表达式,条件成立执行循环体,条件不成立退出循环。 while循环的关键点是循环可能永远不会运行。当条件测试,结果是false,将跳过循环体并执行while循环之后的第一个语句。 实例1: n = 100 sum = 0 counter = 1 while counter <= n: sum = sum + counter counter += 1 print("1 到 %d 之和为: %d" % (n,sum)) 实例2: count = 0 while (count < 9): print ('The count is:', count) count = count + 1 print ("Good bye!

Continue reading 


面向过程和面向对象编程简介

󰃭 2017-08-22

面向过程编程 要理解面向对象编程, 首先要知道面向过程编程 如果要造个汽车, 过程如下 car1 = { 'wheel': 4, 'speaker': 1, 'engine': 1, 'color': 'red' } print(car1) 这就造好了一个汽车(需要4个轮子, 1个发动机, 1个喇叭), 这就是最直观的面向过程编程, 把代码按照运行的过程从上到下依次写下来, 就行了 那如果要再造个汽车呢 car2 = { 'wheel': 4, 'speaker': 1, 'engine': 1, 'color': 'red' } print(car2) 如果还要再造一次呢 每次都要重新把造车的流程写一遍, 很明显, 这个流程是比较固定的, 重复写很费时间和精力 很多人可能已经知道了, 用函数封装这个过程 def create_car(): return { 'wheel': 4, 'speaker': 1, 'engine': 1, 'color': 'red' } 这样, 我们每次造汽车, 只要调用这个创建函数(过程)就好了 car1 = create_car() car2 = create_car() 以上的方式是定义好了造车的过程, 流程走完了, 一辆车子也就出来了

Continue reading 


Python3.6 Unicode 字符串,字符串编码学习

󰃭 2017-08-17

1. Unicode 标准与 utf-8 编码 介绍 1.1 Unicode 标准 Unicode 是一种国际化规范,它为每个字符定义了一个数字编码,与平台,程序,和语言无关,它包含世界上所有语言和各种领域内的符号 Unicode 分为 17 代码平面(Code plan),目前只使用了,平面0、平面1、平面2、平面14、平面15、平面16 最常用的在基本多语言平面(Basic Multilingual Plane,BMP。简称零平面 plane 0)里的所有字符,大部分常用的字符都坐落在这个平面内,比如ASCII字符,汉字等 其他平面是辅助平面(缩写SMP) 其中平面15和平面16上只是定义了两个各占65534个码位的专用区(Private Use Area),分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。所谓专用区,就是保留给大家放自定义字符的区域,可以简写为PUA 编码是将字符串转换为字节序列的过程,计算机能保存,传输,处理的编码后的字节序列,下面是常用的一些编码标准 编码 说明 ASCII 最早的字符集,包含 127 个字符 LANTIN1 英语和西欧编码标准,也被称作 iso-8859-1 gb2312 中国最早提出的一套汉字编码标准,用双字节表示文字符。65536=3755(一级汉字)+3088(二级汉字)等 GBK gb2312 的替代,添加了一些繁体等 GBK2K GBK 的再次扩充,添加的少数名族的文字 UTF-8 是UNICODE的实现方式之一,便于网路传输的编码字体 Unicode编码(十六进制) UTF-8 字节流(二进制) 000000-00007F 0xxxxxxx 000080-0007FF 110xxxxx 10xxxxxx 000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx 010000-1FFFFF 11110xxx10xxxxxx10xxxxxx10xxxxxx 2.1 Python3 与 Python2 字符串区别 Python2 中字符串存在两种字符串,字节字符串(ascii,utf-8,gbk 等)或 Unicode 字符串。 Python3 中字符串只有 Unicode 字符串 2.

Continue reading 


Python matplotlib 绘图 1 - 介绍 matplotlib

󰃭 2017-08-09

1. 什么是 matplotlib Matplotlib 是一个 Python 2D 绘图库,它支持多样化的图像输出格式,可以方便的画出各种统计图形,比如散点图,条行图,饼图等。 它既可以在 Python 脚本和交互环境中使用,也可以在 IPython shell/jupyter notebook/web 中使用 1.1 工具集合 Matplotlib 有一些附加工具集,例如: 工具 功能 Basemap Matplotlib 的子包,可以绘制地图。可视化数据,如在地图上画出城市人口,用户访问密度,挖掘数据内部信息。 cartopy 被设计用来更容易绘制地图数据,可视化数据信息进行数据分析的包 mplot3d 绘制 3d 图形,创建 3d 图形的 2d 投影 seaborn 统计数据可视化库 ggplot 更高层的用最少的代码快速绘制图形的库 2.1 Linux,Mac OSX,Windows 都可以使用 pip 安装 pip install matplotlib 2.2 Linux 也可以使用包管理工具安装 在主要的 Linux 发行版的包管理器,都可以直接安装 matplotlib 和相关工具 Debian / Ubuntu : sudo apt-get install python-matplotlib Fedora / Redhat : sudo yum install python-matplotlib 2.

Continue reading 


Python set 集合用法介绍

󰃭 2017-08-08

1. set 介绍 Python set 是一个没有重复元素的无序集合,集合里面每个元素都是唯一的,它支持并集,交集,差集等操作 2. 创建集合 2.1 用花括号字面量定义集合,集合元素用逗号分隔,即使创建集合时元素出现多次,也只会保留一个 #!/usr/bin/env python # coding: utf-8 nums = { 1, 2, 2, 2, 3, 4 } print(type(nums)) print(nums) The example creates a Python set with literal notation. nums = { 1, 2, 2, 2, 3, 4 } 执行与输出 $ ./set_literal.py <class 'set'> {1, 2, 3, 4} color = [“red”, “blue”] myset = set(color) print(myset) 执行与输出 ```bash $ ./set_from_list.py {'red', 'blue'} #!/usr/bin/env python # coding: utf-8 # file: set_in.

Continue reading 


python map 函数使用,遍历访问可迭代对象

󰃭 2017-08-07

1. 功能介绍 map 调用函数遍历可迭代对象,返回一个迭代器对象 map(function, iterable, …) 可以传递多个迭代器对象给 map 的迭代函数,这个函数接收参数的个数必须和迭代对象个数相同 2. 例子讲解 下面的是一个使用 map 访问整形 list 的例子, 我们定义了一个整形 List,并且通过 Map 对 list 的每一项调用 square 函数来执行计算 #!/usr/bin/env python # coding: utf-8 def square(x): return x * x nums = [1, 2, 3, 4, 5] nums_squared = map(square, nums) for num in nums_squared: print(num) 这个 square() 函数计算参数的平方 def square(x): return x * x 我们定义了一个整数列表 nums = [1, 2, 3, 4, 5] 这个 map 函数对列表的每一项效用 square() 函数

Continue reading 


python3.6 使用 sqlalchemy 读取 mysql 中的数据,进行多进程并发处理

󰃭 2017-08-06

1. 介绍 SQLALChemy SQLALChemy 是一个 python 的 ORM(Object Relational Mapper) 框架,开发人员可以快速开发操作数据库的程序, 它提供完整的数据库访问层,提供高性能的数据库访问能力。 它支持 SQLite、MySQL、Postgres、Oracle 等常用的数据库访问 2. 安装 SQLAlChemy pip install sqlalchemy 2.1 创建测试数据库 # 建立数据库 CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; 2.2 用 SQLALChemy 创建数据库表 2.2.1 程序关键点 创建操作数据库的 engine,使用 pymysql 库访问 mysql 数据库 创建操作数据库的 session,绑定到 engine 上 从 Base 继承定义 User,Article 类,对应 mapping 到数据库的 member,article 表 使用 session.create_all 创建数据库表结构 session.add_all 新增数据到数据库 session.commit 提交所有变更到数据库,此时可以再数据库中查询插入的数据 查询数据使用 session.query 方法,也可以在后面连接使用 filter 进行条件过滤 #!

Continue reading 


Python Do And Dont(中文版)

󰃭 2017-08-03

不应该的用法 from module import * 这种方式在python中一般是合法的, 但我们不推荐这么做, 为什么呢 运行更慢 因为编译器不确定哪些变量是local的, 哪些是global的, 而且在早期的python(2.1之前)版本里, 这种用法还会报错 不确定地函数,变量, 类等引入导致覆盖本地的原有定义 比如, 我们可以如果想打开一个文件 f = open("www") f.read() 一般情况下, 以上代码是可以正常运行的(假设www文件存在), 但如果在文件的头部添加from os import open from os import * f = open("www") f.read() 这种情况下就有问题了, 因为os模块内也有个open函数, 而其返回的是一个整形, 并不是一个文件描述对象 这里可以看出内置的的open定义已经被os内的open 覆盖了 你永远无法确定一个模块内定义了什么名称的对象, 所以用你需要的from module1 import name1, name2 或者 import module1; print(module1.name1) from module import name1, name2 这种用法虽然不推荐, 但没有像from module import *那么强烈 为什么不推荐这种用法呢, 简单来说: 命名空间混乱 foo.py : a = 1 bar.py

Continue reading 


【Python从零开始】第六回_Python基础之"常见错误介绍之1"

󰃭 2017-08-02

关于上节的练习解答 关于上节内容的回顾 练习题 赋值运算符 关于上节的练习解答 请利用以上所学知识1,abs(“1”)能正常输出吗?如果不能的话请说出理由。 解答: 如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型。 关于上节内容的回顾 练习题 利用赋值运算符打印出5个a(例如:aaaaa) 常出错误介绍 1-1:语法错误(SyntaxError) >>> while True print('Hello U3V3') File "<stdin>", line 1, in ? while True print('Hello U3V3') ^ SyntaxError: invalid syntax 1-2:使用 = 而不是 ==(导致“SyntaxError: invalid syntax”) = 是赋值操作符而 == 是等于比较操作。该错误发生在如下代码中: if spam = 42: print('Hello!') 1-3:在字符串首尾忘记加引号(导致“SyntaxError: EOL while scanning string literal”) print(Hello!') print('Hello!) myName = 'Al' print('My name is ' + myName + . How are you?')

Continue reading 


python数据结构

󰃭 2017-08-02

python数据结构 背景 之所以选择这个话题,有两方面原因: 很多情况下,有些语句是看到别人这么用,自己就这么用,并不知道为什么要这么用 写了一段代码,很简洁很美观,跑起来比驴还慢 只有知道内部原理,才能够写出美观的、高性能的代码。 总览 Python的內建类型主要包括数值、序列、映射、类、类型和异常等: 数值(numerics),包括整数(int)、浮点数(float)、复数(complex) 序列(sequences),包括列表(list)、元组(tuple)、范围(range)以及额外的如字符串(string/unicode string)、二进制序列(bytes) 映射(mappings),如字典类型(dict) 集合(set),包括可变集合(set)和不可变集合(fronzeset) 模块(modules) 类(classes)以及类型(class instances) 函数(functions) 方法(methods) 代码对象(code objects) 类型对象(type objects) 空值(None) 布尔值(True, False) 内部对象,包括堆栈(stack/traceback)和切片(slice) 一些属性(attribute),主要有object.__dict__, instance.__class__, class.__bases__,definition.__name__, definition.__qualname__, class.__mro__, class.mro(), class.__subclasses__() 重点: 针对于所有的类型,会有布尔判断的需求,主要在if和while两种条件判断中,下面给出所有的非真判定: None False 数值类型的0值,如0, 0.0, 0j 空序列,如'', [], () 空映射,如{} 用户自定类型,如果重载了__bool__()或者__len__(),判断前者为False或者后者为0 逻辑运算,and, or, not x and y # if x is false, then x, else y x or y # if x is false, then y, else x not x # if x is false, then True else False 数值 python的数值类型非常强大,这也是很多情况下把python当做计算器的原因之一。主要有整数、浮点数和复数三种类型,可以通过函数int(), float(), complex()分别进行转化。数值类型的重点在于运算符操作,主要的运算符有:

Continue reading 


Elasticsearch 应用开发(1)-- 安装部署

󰃭 2017-08-02

1. 介绍 Elasticsearch Elasticsearch 是一个扩展性强,开源的全文检索引擎。它可以存储大量的数据,并且能进行实时检索和分析操作 1.1 它的几个简单应用场景 存储销售的产品信息,给用户提供搜索,搜索词自动完成功能 Elasticsearch/Logstash/Kibana 整合,收集应用程序/服务日志,进行日志的聚合,分析处理,挖掘你感兴趣的信息 商品价格提醒功能,把用户感兴趣的商品价格信息保存到 Elasticsearch,使用 reverse-search 检查价格变动,给用户推送通知 商业信息分析系统(BI)。保存商业(广告)数据到 Elasticsearch,通过 Kibana 快速定制 dashboards,可视化商业数据,分析其中的信息,使用 Elasticsearch 的聚合功能进行复杂的商业数据查询 2. 安装部署 2.1 运行环境 centos7 / debian8 java1.8 (jdk) python3.6 (示例程序) 下载安装 jdk jdk 下载地址,选择 jdk-8u144-linux-x64.tar.gz 对应的下载地址 安装 # 解压,在下载路径执行 tar xvf jdk-8u144-linux-x64.tar.gz -C /opt # 创建符号链接 ln -sf /opt/jdk1.8.0_144 /opt/jdk # 测试 java -version 输出: java version "1.8.0_144" 2.2 Elasticsearch 安装 下载 Elasticsearch5.5.0 安装 # 解压,在下载路径执行 tar xvf elasticsearch-5.

Continue reading 


【Python从零开始】第五回_Python基础之"赋值运算符"

󰃭 2017-07-31

关于上回的练习解答 关于上节内容的回顾 练习题 赋值运算符 关于上回的练习解答 请利用以上所学知识1,运用加减乘除计算出四个数字的24点,并打印。 关于上节内容的回顾 abs(x)->取绝对值 int(x)->取整数 float(x)->取浮点数 练习题 abs(“1”)能正常输出吗?如果不能的话请说出理由。 赋值运算符 1-1:python也允许我们同时为多个变量赋值(包括为多个变量赋不同类型的值),例如: a = b = c = 3 #三个变量赋同样的值 d, e, f = -3, 3.3, 'u3v3' #三个变量赋不同类型的值 1-2:赋值运算的种类 # -*- coding: UTF-8 -*- a = 1 b = 2 c = 3 c = a + b print ("Line 1 - Value of c is ", c) c += a print ("Line 2 - Value of c is ", c ) c *= a print ("Line 3 - Value of c is ", c ) c /= a print ("Line 4 - Value of c is ", c ) c = 2 c %= a print ("Line 5 - Value of c is ", c) c **= a print ("Line 6 - Value of c is ", c) c //= a print ("Line 7 - Value of c is ", c) 以上输出结果如下:

Continue reading 


【Python从零开始】第四回_Python基础之"算数运算符函数"

󰃭 2017-07-31

关于上回的练习解答 关于上节内容的回顾 练习题 算数运算符函数 关于上回的练习解答 请利用以上所学知识1,请去除去除数字后再输出。例 ‘www.u3v3.com’,经过去除后,输出 ‘www.uv.com’。 解答如下: 关于上节内容的回顾 下表列出了所有Python语言支持的算术运算符。 假设变量a持有10和变量b持有20,则: 运算符描述实例 + 加法 - 对操作符的两侧加值a + b = 30 - 减法 - 从左侧操作数减去右侧操作数a - b = -10 * 乘法- 相乘运算符两侧的值a * b= 200 / 除 - 由右侧操作数除以左侧操作数b / a = 2 % 模 - 由右侧操作数和余返回除以左侧操作数b % = 0 指数- 执行对操作指数(幂)的计算 a ** b = 10 幂为 20 //地板除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。9//2 = 4 而 9.0//2.0= 4.0 练习题 运用加减乘除计算出四个数字的24点,并打印。

Continue reading 


Flask 服务部署(Nginx+Gunicorn+Gevent)

󰃭 2017-07-25

Flask 项目部署 我们开发好了一个flask项目, 需要部署到线上服务器, 那我们的线上服务应该如何部署呢 基本的架构如下 Nginx 在开发环境, 我们一般直接运行Python服务, 启动了某个端口(一般是5000端口), 然后通过该端口进行开发调试 但线上环境一般不会直接这样提供服务, 一般的线上服务需要通过 Nginx 将外部请求转发到Python服务 这样有什么好处 隐藏python服务, 避免直接将python服务暴露出去 提高web服务的连接处理能力(Nginx) 作为反向代理, 提升python整体服务处理能力 我们可以配置的Nginx配置如下 upstream flask_servers { server 127.0.0.1:9889; } server { listen 80; server_name dev.simple-cms.com; access_log /data/logs/nginx/simple_cms_access.log main; error_log /data/logs/nginx/simple_cms_error.log debug; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_pass http://flask_servers; } location ^~ /static { root /data/www; } } 如果有多个python服务器, 可在upstream下继续添加其他的python服务列表 Gunicorn + Gevent Gunicorn Guicorn 是一个python的一个 WSGI 的web sever, 什么是WSGI

Continue reading 


python3.6 - threading 多线程编程进阶,线程间并发控制(2)

󰃭 2017-07-25

1. 线程间同步简介 Condition 条件变量 Semaphore 信号量 Barrier 栅栏/屏障 Timer 定时器 2. Condition 条件变量 定义 条件变量变量是来自 POSIX 线程标准的一种线程同步机制。主要用来等待某个条件的发生,用来同步同一进程中的多个线程。 条件变量总是和一个互斥量或锁关联,条件本身由互斥量保护,线程在改变条件状态时必须锁住互斥量。 线程可以等待在某个条件上,不需要通过轮询的方式来判断,节省CPU时间 使用方法 条件变量需要配合着锁(或者互斥量)一起使用,条件本身接受锁的保护,控制线程的资源访问 条件变量使用 with 语法自动调用关联锁的获取(acquire),释放(release)方法 wait 方法会释放锁,并且阻塞当前线程,直到被其他线程的 notify/notify_all 唤醒,一旦阻塞的线程被从 wait 唤醒,将重新获取锁 用 notify 方法唤醒等待条件变量的一个线程,notify_all 方法唤醒等待条件变量的所有线程 notify 和 notify_all 方法不会释放锁,也就是说被唤醒的线程不会立即从 wait 方法返回,需要调用 notify 和 notify_all 的线程交出锁的所有权才能返回 使用示例 生产者,消费者模型,使用条件变量控制并发访问普通的 list #!/usr/bin/env python # coding: utf-8 import time import threading import random import itertools # 全局变量 # 停止标志 is_stop = False # 队列最大值 MAX_NUM = 100 # 队列对象 data_queue = [] class Producer(threading.

Continue reading 


python3.6 - threading 多线程编程基础(1)

󰃭 2017-07-24

1. 什么是进程,线程 进程(process) 进程是正在运行的程序的实例 操作系统利用进程把工作划分为一些功能单元 操作系统加载程序,以进程的方式在操作系统中运行它,并分配了系统资源给进程(内存等) 线程(thread) 进程中所包含的一个或多个执行单元称为线程(thread),线程是 CPU 调度和执行的基本单位 操作系统创建一个进程后,该进程会有一个主线程,主线程退出进程就会退出,并释放进程占用的资源 一个线程可以创建另一个线程,同一个进程中的多个线程之间可以并发执行 理解进程线程关系,公司与员工 <==> 进程与线程 公司本身是进程,它包含很多人,每个人是一个线程,还有资源打印机,会议室,资金等 真正执行工作的是线程(公司员工),公司的业务状态是靠人来执行的 这些人可以并行工作,处理事情 当大家访问公共资源的时候会有冲突,例如使用相同的会议室,打卡,这就需要队列排队,预约上锁 但是与现实模型不同的是,这些人是有几个 cpu 控制的,例如 8 个 cpu 对应 80 个人,cpu 需要切换控制 线程遇到阻塞的时候,cpu 就需要切换执行另一个线程,避免等待 2. python 多线程 python 带有 threading 库,支持开发多线程程序 用对象实现多线程示例 import time import threading def main(): # 线程函数 def thr_func(data): ''' 循环打印,打印后暂停1秒 ''' for i in range(2): print(data, i) time.sleep(1) # 创建 3 个线程 # 创建第一个线程 one_thr = threading.Thread(target=thr_func, args=['one thr']) # 开始执行线程 one_thr.

Continue reading 


【Python从零开始】第三回_Python基础之"算数运算符"

󰃭 2017-07-24

关于上回的练习解答 关于上节内容的回顾 练习题 算数运算符 关于上回的练习解答 请利用以上所学知识1,任意输入两个数字并计算它们的乘积。 解答如下: 关于错误TypeError: can’t multiply sequence by non-int of type ‘str’,python3.x里面input默认接收到的事str类型,所以你输入的就是字符串3和字符串100。PS:如果你想得到int的话、可以用a =int(input())这样就行了。 *大家有问题或者不清楚的可以在 评论里回复 或者在我们的 QQ群(278529179)里@管理员。 关于上节内容的回顾 1-1:字符串可以用“+”运算符连接在一起 word = 'U3' + 'V3' word = 'U3' + "V3" 1-2:字符串用*重复显示(上回没讲,新增) word = 'U3' + 'V3' '<' + word*3 + '>' 1-3:可以指定的子串切片标志来表示:两个指数由冒号分隔 1-4:切片索引可以使用默认值;前一个索引默认为零,第二个索引默认被切片的字符串的大小 1-5:Python字符串不能改变。想修改指定索引位置的字符串会导致错误 1-6:创建一个新的字符串是简单而有效的方法 1-7:一个有用的切片操作:[:]+[:]等于。 练习题 a = “www.u3v3.com” 请去除去除数字后再输出。例 ‘www.u3v3.com’,经过去除后,输出 ‘www.uv.com’ *大家有问题或者不清楚的可以在 评论里回复 或者在我们的 **QQ群(278529179)**里@管理员。 关于算数运算符 如图: 看一个实例: a = 3 b = 4 c = 5 d = 7 print(a*(c-b+d)) 注意点

Continue reading 


【Python从零开始】第二回_Python基础之"字符串"

󰃭 2017-07-23

上节内容的回顾 关于字符串 上节内容的回顾 1.输出 1-1:用print()在括号中加上字符串,数字等,就可以向屏幕上输出指定的文字。比如输出’hello,u3v3’,用代码实现如下: print('hello, u3v3') 1-2:print()函数也可以接受多个字符串连接,用逗号“,”隔开,就可以连成一串输出: print('hello', 'u3', 'v3') 1-3:print()函数还可以打印数学公式(⊙o⊙)哦: print('3 + 30 =', 3 + 30) #输出结果3 + 30 = 33 1-4:关于常见错误(invalid syntax错误) 首先是版本问题哦,看一下你的Python的版本,是2.x还是3.x的。2.x系列版本当是无需加括号的,3.x版本必须加括号来进行输出等一系列活动。 2.输入 2-1:Python的input(),可以让用户输入字符串,并存放到一个变量里。例如 name = input() 当你输入name = input()并按下回车后,Python交互式命令行就在等待你的输入了。这时,你可以输入任意字符,然后按回车后完成输入。例如: 3.练习 请利用以上所学知识,任意输入两个数字并计算它们的乘积。 *大家有问题或者不清楚的可以在 评论里回复 或者在我们的 **QQ群(278529179)**里@管理员。 关于字符串 2-1:字符串是Python中最常用的数据类型。我们可以使用单引号(‘或双引号")来创建字符串。 a = 'Hello' b = "U3V3" 2-2:单字符也在Python也是作为一个字符串使用,Python访问子字符串,可以使用方括号来截取字符串,如下实例: a = 'Hello' b = "U3V3" print("a[0]:", a[0]) print('b[1:2]:', b[1:2]) print("b[0:3]:", b[0:3]) 以上实例执行结果: 2-2:关于字符串的更新 可以对已存在的字符串进行修改,并赋值给另一个变量。 如下: a = 'Hello' print("让U3V3教你更新字符串 :- ",a[:6] + ' www.

Continue reading 


Flask 脚本服务搭建(Flask-cli)

󰃭 2017-07-23

基于Flask的脚本框架 一般来说, Flask是作为Web服务来使用的, 但有时, 我们需要基于Flask, 写一些脚本, 而且希望这些脚本能与web相关的基础模块兼容, 这该如何使用呢 场景 我有一个web服务, 基于flask搭建, 当完成后, 还有一些脚本需要运行. 脚本的运行也需要常规的redis连接, http请求, 数据库连接等等, 这些基础模块在web应用中已经实现了, 但我们在脚本中无法基于flask直接使用, 为什么呢? 因为很多时候, 我们的基础模块内含了很多请求相关的上下文内容, 而这些又是脚本运行时没有的, 这就导致了这些模块不能在脚本服务中直接使用 Flask-cli 在Flask中, 有这么一个插件Flask-cli, 可以帮助我们一定程度上解决上面的问题, 而且还提供了强大的命令行管理工具, 帮助我们快速构建脚本服务 当我们安装好flask后, 我们直接执行flask 命令行命令, 可以看到 ... Options: --version Show the flask version --help Show this message and exit. Commands: run Runs a development server. shell Runs a shell in the app context 最后的 run 和 shell 命令, 这时Flask 内置的命令, 我们也可以添加属于自己的命令 简单命令 简单命令行实现如下

Continue reading 


Nginx + PHP 配置

󰃭 2017-07-22

FastCGI 服务 现在一般的PHP服务都会启动一个 php-fpm 的服务, 这个服务就是 fastcgi 服务, nginx可以将请求直接路由到该服务, 让 php 执行业务处理 Nginx 配置 Nginx 一般通过fastcgi_pass 直接将请求转发到fastcgi 服务, 而不是用proxy_param 在/data/www/test 下有个test.php 文件 内容如下 echo 'Hello World!!!'; 配置如下: server { listen 8000; location / { root /data/www/test; # PHP入口文件目录 fastcgi_pass localhost:9000; # FastCGI 服务端口 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; include fastcgi_params; } } 现在我们访问8000端口 http://192.168.199.191:8000/test.php 可以在页面红看到 Hello World!!!

Continue reading 


composer 自动加载

󰃭 2017-07-18

composer 自动加载 入口 在laravel项目中,所有的依赖包都存在于vendor目录下,对应的类自动加载源码也存在于vendor目录中(由入口文件public/index.php可追踪到),首先打开目录我们可以在最外层找到 autoload.php 对应代码如下 // 引入了真正的aotuload require_once __DIR__ . '/composer/autoload_real.php'; // 调用了autoload核心函数 return ComposerAutoloaderInit9a624ef1199d9f899a6118c386c86aa3::getLoader(); 核心 追踪到autoload.php时,可以找到自动加载最核心的代码 getLoader ,可以通过以下问题来理清自动加载的流程: 自动加载的规则 vendor中的每个依赖都有composer.json文件,其中 autoload 这个字段告诉composer该依赖遵循了php哪种自动加载的规则,使得composer可以将它的规则写入对应的文件中以实现自动加载。目前composer中支持四种规则分别为 psr-0 、 psr-4 、 classmap 、 files 。 源码分析 classmap // 以hamcrest/hamcrest-php为例 // composer.json 中定义了该插件使用了classmap的规则 { "autoload": { "classmap": ["hamcrest"], "files": ["hamcrest/Hamcrest.php"] }, } // 目录结构 vendor └── hamcrest └── hamcrest-php ├──hamcrest ├──Hamcrest ├── Arrays │ ├── IsArray.php │ ├── IsArrayContaining.php │ ├── IsArrayContainingInAnyOrder.php ... // 对应 autoload_static.

Continue reading 


Nginx 代理服务配置以及反向代理简单配置

󰃭 2017-07-13

代理服务 一个常见的场景是, 我们的python服务开起了, 但一般不会将python服务对外直接服务, 而是会通过Nginx 将请求转发到python的服务端口, 这里的Nginx就是作为代理服务使用的, 那么Nginx的代理服务如何配置呢, –下面以上一篇的静态文件服务( https://www.u3v3.com/ar/1375 )作为后端服务, 将web请求转发到该服务 – 代理配置 上一篇我我们用8080端口作为web服务端口, 可以访问静态index.html 和 images 资源 现在, 我们希望通过9090端口, 也能访问同样的资源 当然, 我们不会重新配置8080端口同样的配置来提供服务, 而是通过代理服务, 将9090的请求转发到8080端口, 这样, 我们就能实现目标了 我们需要在nginx.conf配置添加如下内容 server { listen 9090; location / { proxy_pass http://localhost:8080; } } sudo nginx -s reload 重新加载配置 现在, 所有通过9090访问的请求都会被转发到8080端口, 这就实现了代理服务的需求 以上, 仅仅是实现了一个简单的代理服务, 那么这个代理服务一般做什么用的呢 反向代理 一般来说, Nginx作为一个性能强劲的web服务器, 我们用来做代理服务, 可以将web请求转发到多个后端服务, 这样就可以达到分担服务压力的目的, 比如, 如果我们的web服务需要承担100QPS的请求, 而我们有4台web服务器, 那么我们就可以通过代理服务将100QPS平均分担到4台web服务, 这样, 每台web服务就仅需负担25的QPS, 达到了负载均衡的目的 这就是所谓的反向代理的一种 那么这种是如何实现的呢 ngx_http_upstream_module 模块 Ngnix 的ngx_http_upstream_module可以用来按组定义服务列表, 这些定义好的服务列表组, 可以提供给proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass使用, 将Nginx的的请求均衡负载到某个组的每台服务器上

Continue reading 


Nginx 安装管理和静态文件配置

󰃭 2017-07-12

Nginx 源码编译安装 下载源码包 wget https://nginx.org/download/nginx-1.13.3.tar.gz 解压进入目录 tar xvf nginx-1.13.3.tar.g cd nginx-1.13.3 ./configure make sudo make install 如果这个过程可能会提示某些类库缺失, 可以安装后, 重新从./configure 开始执行 默认的nginx命令安装在/usr/local/nginx/sbin/nginx, 该目录并不在我的系统$PATH中, 所以直接的nginx 命令是会找不到的 做个软链接到你的$PATH路径即可 想要看到你的$PATH路径 echo $PATH 软连到其中任意几个路径下面即可 sudo ln -sf /usr/local/nginx/sbin/nginx /usr/local/sbin/ 现在, 通过sudo nginx 就可以启动nginx服务了 Nginx 启动/停止/重载 Nginx 一旦启动之后, 就可以通过发送信号来进行进程管理 nginx -s signal sigal 可能是以下几个之一 reload quit stop reopen quit nginx -s quit 平滑关闭Nginx服务, 这种方式可以让 Nginx 完全处理完成请求后将进程关闭, 注意, 这条命令需要使用启动Nginx进程的用户操作 reload 当Nginx配置做了修改, 我们需要重新加载配置, 为了保证这个过程中, Nginx服务可以正常运行和进行服务, 我们可以使用这个命令 nginx -s reload 该命令可以启动新的worker进程, 并逐渐将旧的woker进程关闭, 这个过程是平滑的

Continue reading 


golang安装

󰃭 2017-07-06

golang安装 简介 go语言的安装主要分为3个步骤 下载 安装 环境变量配置 下载 因为谷歌被墙了,所以要么翻墙,要么另寻资源 在这里我会给出一个我常用的下载地址: https://golangtc.com/download windows系统下载.msi文件 linux系统下载.tar.gz文件 请根据自己的操作系统选择相应的安装包 安装 windows下安装 windows安装较为简单,根据向导安装即可,就不细说了 linux下安装 使用命令tar -zxvf go1.8.3.linux-amd64.tar.gz解压文件便安装完成了 这里以1.8.3版本为例,实际操作需要把文件名替换成实际下载的文件名 PS:linux系统一般会安装在/usr/local/go目录下 环境变量配置 环境变量 GOPATH为你的工作目录,通过go get命令拉取的go代码都会存在该目录下 GOROOT为GO的安装目录,配置该变量使用go命令便不需带上路径了 windows环境变量配置 计算机->属性->高级系统设置->环境变量->新建 变量名为GOPATH, 变量值为任意目录 PS:windows下使用默认安装,GOROOT会自动配置 linux环境变量配置 我使用的系统为centos6.9, 如果配置文件的位置和我的不一样,请自行搜索 下面将进行命令示例(go安装目录为/usr/local/go, 工作目录为/usr/local/work) vim /etc/profile #编辑profile文件,在文件尾加上: export GOPATH=/usr/local/work export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT:$GOPATH #编辑结束 source /etc/profile 验证 go version 输出版本信息即说明安装成功 题外话 go其实是一门非常简洁的语言,希望大家都能爱上它^_^

Continue reading 


python包和模块帮助信息获取

󰃭 2017-07-05

对刚入门的Pythoner来说, 对很多python包和模块不了解, 也不知道如何去查响应的帮助信息, 以下总结如何查询python包和模块的帮助信息 pydoc pydoc 是查询python文档的命令行工具, 比如, 我们想查datetime的文档 可以执行命令 pydoc datetime 得到帮助信息如下 pydoc -k keyword 可以使用关键字查询相关的包和模块, 查到后, 用pydoc module_name 查询帮助文档 pydoc 还可以起一个本地的端口服务, 用以通过web页面查看已经安装的包和模块的帮助信息 如下 pydoc -p 6789 通过http://localhost:6789/ 就能看到本地的包和模块列表了, 点击进去就可以看到相应的帮助信息了 help 函数 在python shell里 通过help 函数也可以查看模块帮助信息 关键字 help('datetime') 模块 如果模块已经被引入, 可以直接如下查看 import datetime help(datetime) 对象 如果得到了某个模块的对象, 我们也可以获得该对象的帮助信息 import datetime d = datetime.datetime.now() help(d) dir dir 函数可以列出模块和对象内部的所有属性和方法, 在一定程度上也可以帮助查看模块信息 比如 dir(datetime) 列举了该模块下的子模块和内置属性 ['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo'] import datetime d = datetime.

Continue reading 


【Python从零开始】Python基础之"输入输出"

󰃭 2017-07-03

学习前的准备 最常用的输出 必学会的输入 1. 学习前的准备 关于Python的安装以及环境配置可以先参考以下文章 Python的环境搭建 windows python 环境安装和配置 wMac pycharm环境配置 此课程所有讲解到的语法知识都是基于Python3的,Python3在设计的时候没有考虑向下兼容,所以遇到任何问题可以在QQ群(278529278)或者文章底部评论留言,我们会一一解答,谢谢大家配合。 2. 最常用的输出 标签: 先高亮一段代码 # 变量的定义 x="Hello" y="Word" # 换行输出 print( x ) print( y ) print('---------') # 不换行输出 print( x, end=" " ) print( y, end=" " ) print() 关于变量的定义 Python是一种动态类型语言,在赋值的执行中可以绑定不同类型的值,这个过程叫做变量(variable)赋值操作,赋值同时确定了变量类型。 变量定义方法很简单: x="Hello" y="Word" 这个操作过程就是赋值,意思把字符串Hello和Word分别赋值给了变量x和y,用等号来连接变量名和值。之后就可以在表达式中使用这个新变量了。 注意:在赋值时,值是什么数据类型,就决定了这个变量是什么类型,变量名引用了字符串的同时也引用了它的类型。 变量命名规范 变量名可以包括字母、数字、下划线,但是数字不能做为开头。例如:Hello1是合法变量名,而1World就不可以。 系统关键字不能做变量名使用,例如:print。 除了下划线之个,其它符号不能做为变量名使用,例如:()!@#¥%。 Python的变量名是对大小写敏感的,例如:Hello和hello就是两个变量名,而非相同变量的(⊙o⊙)哦。 关于输出 通常情况下想查看变量结果或是内容时,在代码中会用到最常用的print输出。 print语句操作方法: st=>start: 定义变量 op=>operation: 输出print cond=>condition: 使用python命令执行是否通过 e=>end st->op->cond cond(yes)->e cond(no)->op # 变量的定义 x="Hello" y="Word" # 换行输出 print(x) print(y) print语句不换行操作: # 变量的定义 x="Hello" y="Word" # 不换行输出 print(x, end=" ") print(y, end=" ") print() print默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""。

Continue reading 


【Python从零开始】第一回_Python基础之"输入输出"

󰃭 2017-07-03

学习前的准备 最常用的输出 必学会的输入 1. 学习前的准备 关于Python的安装以及环境配置可以先参考以下文章 Python的环境搭建 Windows python 环境安装和配置 Mac pycharm环境配置 此课程所有讲解到的语法知识都是基于Python3的,Python3在设计的时候没有考虑向下兼容,所以遇到任何问题可以在QQ群(278529278)或者文章底部评论留言,我们会一一解答,谢谢大家配合。 2. 最常用的输出 先高亮一段代码 # 变量的定义 x="Hello" y="Word" # 换行输出 print( x ) print( y ) print('---------') # 不换行输出 print( x, end=" " ) print( y, end=" " ) print() 2-1关于变量的定义 Python是一种动态类型语言,在赋值的执行中可以绑定不同类型的值,这个过程叫做变量(variable)赋值操作,赋值同时确定了变量类型。 变量定义方法很简单: x="Hello" y="Word" 这个操作过程就是赋值,意思把字符串Hello和Word分别赋值给了变量x和y,用等号来连接变量名和值。之后就可以在表达式中使用这个新变量了。 注意:在赋值时,值是什么数据类型,就决定了这个变量是什么类型,变量名引用了字符串的同时也引用了它的类型。 2-2变量命名规范 1、变量名可以包括字母、数字、下划线,但是数字不能做为开头。例如:Hello1是合法变量名,而1World就不可以。 2、系统关键字不能做变量名使用,例如:print。 3、除了下划线之个,其它符号不能做为变量名使用,例如:()!@#¥%。 4、Python的变量名是对大小写敏感的,例如:Hello和hello就是两个变量名,而非相同变量的(⊙o⊙)哦。 2-3关于输出 通常情况下想查看变量结果或是内容时,在代码中会用到最常用的print输出。 print语句操作方法: # 变量的定义 x="Hello" y="Word" # 换行输出 print(x) print(y) print语句不换行操作: # 变量的定义 x="Hello" y="Word" # 不换行输出 print(x, end=" ") print(y, end=" ") print() print默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""。

Continue reading 