flask 控制器分离(蓝图)应用

󰃭 2017-07-03

flask 应用 在之前一篇文章( https://www.u3v3.com/ar/1317 )里, 我们描述了简单的flask应用创建, 结构如下 run.py templates └── hello.html run.py中 from flask import Flask from flask import render_template # 加载视图模块 app = Flask("Test") @app.route('/') def hello(): return 'hello world' @app.route('/hello') def show_page(): return render_template('hello.html') # 加载视图 if __name__ == '__main__': app.run(port=9999) hello.html里 <h1>Yi_Zhi_Yu</h1> 现在, 我们的控制代码都放在run.py里, 项目小问题不大, 但项目大的时候, 所有控制代码放在一个模块文件里, 就不太好了 蓝图模块化 在 flask 应用里, 我们可以用蓝图的特性来组织控制代码, 将其模块化 新结构如下 ├── handlers │ └── test.py ├── run.py ├── templates │ └── hello.html └── urls.

Continue reading 


Centos linux 常用命令与功能讲解

󰃭 2017-06-30

1. 操作系统 centos6.5 centos7 2. 日常维护命令 2.1 软件管理使用 yum/rpm 命令(管理 mlocate 的示例) # 查看操作系统版本,查看软件包版本 rpm -qi centos-release # 查看软件文件安装的位置信息 rpm -ql mlocate # 安装软件 yum install mlocate # 搜索软件包 yum search mlocate # 卸载软件 yum erase mlocate # 列出安装的软件 yum list # 列出已经安装的软件包 yum list installed 2.2 安全相关 # 安全更新 yum --security upgrade # 防火墙 ## 关闭防火墙 systemctl stop firewalld ## 启动防火墙 systemctl start firewalld ## 配置防火墙策略 vi /etc/sysconfig/iptables # selinux 配置 ## 查看状态 sestatus ## 输出 ## SELinux status: enabled ## SELinuxfs mount: /selinux ## Current mode: enforcing ## Mode from config file: enforcing ## Policy version: 21 ## Policy from config file: targeted ## 设置模式 setenforce 0 ## 修改配置 vi /etc/sysconfig/selinux 2.

Continue reading 


Python 基本排序算法:冒泡,选择,快速排序

󰃭 2017-06-27

冒泡排序 算法 n 个数的序列 [a1,a2,a3,…,an] 从 a1 开始比较相邻元素,遍历到 an,如果第一个比第二个大,就交换他们两个 第一次遍历之后,最大的在最后(an) 从 a1 开始比较相邻元素,遍历到 a(n-1) [倒数第二个],第一个比第二个大就交换他们 第二次遍历之后,最后两个值 a(n-1),an, 分别是第二大的值,第一大的值 针对所有的元素重复以上的步骤 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 示例 # 原始序列 [6, 8, 5, 7, 3] # 第 1 次排序 [6, 5, 7, 3, 8] # 第 2 次排序 [5, 6, 3, 7, 8] # 第 3 次排序 [5, 3, 6, 7, 8] # 第 4 次排序 [3, 5, 6, 7, 8] # 第 5 次排序不需要移动 代码 def bubble_sort(nums): ''' 冒泡排序, 时间复杂度 O(n^2) ''' total = len(nums) for i in range(total-1): for j in range(total-i-1): if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] return nums 选择排序 特点 选择排序是一个不稳定的排序算法 比较次数 O(n^2),交换次数 O(n) 算法的时间复杂度 O(n^2) 交换次数比冒泡排序少, n 值较小时,选择排序比冒泡排序快 算法 n 个数的序列 [a1,a2,a3,…,an]

Continue reading 


python中的 else 关键字

󰃭 2017-06-25

else Python 中, 我们经常遇到else 关键字, 如果是在if 判断中, else 比较容易理解, 但是在异常捕获里, else 也会被用到, 这就难理解了 异常捕获 python 中的异常捕获, 如下 try: x = 1/0 except ZeroDivisionError as e: print('value exception') 打印value exception 触发了ZeroDivisionError 异常 else 关键字如何应用进去呢, 如下 try: x = 1/0 except ZeroDivisionError as e: print('value exception') else: print('else stuff') 输出 value exception 没有触发 else, 如果没有异常呢 try: x = 1/1 print('try ...') except ZeroDivisionError as e: print('value exception') else: print('else stuff') 输出 try .

Continue reading 


pycurl 单请求和并发请求处理

󰃭 2017-06-25

pycurl 是什么 pycurl 是python中针对curl的封装, 功能强大, 性能优异, 应用 当我们需要在应用中, 向其他服务发起http请求的时候, pycurl就派上用场了 import pycurl import urllib.parse from io import BytesIO c = pycurl.Curl() buffer = BytesIO() url = 'https://www.baidu.com' c.setopt(c.WRITEFUNCTION, buffer.write) c.setopt(c.CONNECTTIMEOUT, 1) # 1s 连接超时设置 c.setopt(c.TIMEOUT, 3) # 3s 整个请求超时设置 c.setopt(c.CUSTOMREQUEST, "GET") c.setopt(c.DNS_CACHE_TIMEOUT, 3600) c.setopt(c.URL, url) c.perform() resp = buffer.getvalue() print(resp) 可以得到http 响应 b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>\r\n</body>\r\n</html>' 得到的resp 是个byte类型的字符串, 所以你可能要做个转码 resp = resp.decode('utf-8') 如果是post 请求, 结合我之前写的python构造类http_build_query函数简版, 构造post body, 如下 import pycurl import urllib.

Continue reading 


使用魔术方法丰富Python Class

󰃭 2017-06-25

内容意译文于下面文章, 水平有限,欢迎指正。 Enriching Your Python Classes With Dunder (Magic, Special) Methods Python学习群:278529278 (欢迎交流) 什么是魔术方法? 在python中,有一些预定义的特殊方法可以用来增加自定义的类实现,他们很容易辨识,方法名的前后都是双下划线。 这些特殊方法有时候也会被称为魔术方法,尽管其实他们本身并不神秘,也不必把它们想的过于复杂。魔术方法能够让自定义类去模拟内置类的行为。 比如说,可以通过len()方法获取string的长度,但是一个空实现的自定义类是不能开箱支持这种操作的。 class NoLenSupport: pass >>> obj = NoLenSupport() >>> len(obj) TypeError: "object of type 'NoLenSupport' has no len()" 要解决这个问题,需要在自定义添加__len__魔术方法 class LenSupport: def __len__(self): return 42 >>> obj = LenSupport() >>> len(obj) 42 另一个典型的例子是切片,可以通过实现__getitem__方法来支持python list 的切片语法。 魔术方法和python数据模型 魔术方法这一优雅的设计也被称为python数据模型, 这也开发者能够充分利用和挖掘python语言特性,比如,序列,迭代,操作符重载,属性访问等。 Python的数据模型可以被看作一个强大的api,通过实现魔术方法与之沟通。当希望写出更pythonic代码,就需要知道如何在恰当的地方使用好魔术方法。 对于初学者来说,不需要担心太多的概念。在这篇文章中,将通过一个简单的账户来介绍魔术方法的使用。 丰富一个简单的帐号类 本篇将通过实现一系列魔术方法来丰富一个简单python类, 从而来解锁下面这些语言特性: 新实例的初始化 对象内容展示 开启迭代功能 操作符重载(比较) 操作符重载(加法) 方法调用 上下文管理器(with语法) 对象实例初始化:__init__ 当开始定义一个类的时候,已经需要一个魔术方法了,__init__方法是一个构造函数,用来产生一个类的对象实例。 class Account: """A simple account class""" def __init__(self, owner, amount=0): """ This is the constructor that lets us create objects from this class """ self.

Continue reading 


django_gunicorn配置

󰃭 2017-06-22

第一句话就是吐槽!网上百度的纯粹尼玛一堆狗屎!超级不适合新手!这里我来给各位新手讲解如何把django部署到nginx+gunicorn! 环境:云服务器ubuntu16.04系统。django版本1.10.6。 首先讲解原理:浏览器输入你的网址后回车后,nginx第一步收到请求,如果访问的是静态资源,比如html,png,css,js等nginx直接处理了。如果是动态请求就是第二步把这个动态请求转发给gunicorn来处理了。他俩分工一静一动,这样的好处我不用多说了。就他么个这意思网上的教程就磨磨唧唧一大堆。 他们的原理和过程是这样的,那么问题来了,怎样把他们结合在一起? 首先你要知道 如果没有nginx,光有gunicorn是可以直接运行django项目的。 比如 $ gunicron 你的项目名,再比如 $ gunicorn -w 1 -b IP:端口项目名.wsgi 就可以运行。 其次如果配置是这样的,我的nginx路径是 : /etc/nginx/ , 配置/etc/nginx/sites-enabled/default。 你也许会看到网上说要么编辑nginx.conf 要么新建一个配置文件。 我没有那么做我就一个项目所以直接更改nginx的默认配置。 记得用 sudo vim /etc/nginx/sites-enabled/default 把原有的注释掉改成这样 server { listen 80; server_name example.org; # 这是HOST机器的外部域名,用地址也行 root /home/ubuntu/.... #这里填你的项目根目录 location / { proxy_pass http://127.0.0.1:8080; # 这里是指向 gunicorn host 的服务地址址 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static { alias /home/ubuntu/项目名/static/; # 在你项目根目录建一个存放静态资源的文件夹供nginx访问。 } } 注意:1.我的缩进格式不对,请你注意。 2.proxy_pass 和 一会gunicorn启动时用的IP地址和端口必须一致,因为nginx收到动态请求要通过这个地址转发给gunicorn。 3.

Continue reading 


python下的单例模式

󰃭 2017-06-21

单例模式 何为单例模式? 单例模式是一种设计模式, 表示针对某类的实例, 有且仅会有单个实例对象会被创建, 这样, 进程在运行过程中, 在任何地方得到的这个类的实例总是共享的 应用场景 比如redis的连接实例, 数据库的连接实例等等, 在进程运行过程中, 我们不希望多次创建连接实例, 这时就可以使用单例 单例实现 那么, 在python里如何创建单例呢 在类实例前, 会调用一个内置的函数__new__, 我们可以通过修改这个函数, 来保证实例化的结果总是同一个实例 __new__ 实现单例 class S(object): def __new__(cls): if hasattr(cls, 'ins'): return getattr(cls, 'ins') instance = object.__new__(cls) cls.ins = instance return instance if __name__ == '__main__': s1 = S() s2 = S() print(id(s1)) print(id(s2)) 这里我们运行后, 可以看大id(s1) 和 id(s2)的结果是一样的, 说明两次实例化返回的是相同的实例 静态方法调用 在PHP里, 可以通过静态类方法调用得到单例, 在python里也可以这么做 class S(object): @classmethod def get_ins(cls): if hasattr(cls, 'ins'): return cls.

Continue reading 


windows python 环境安装和配置

󰃭 2017-06-19

windows 环境下python环境安装流程说明 环境说明 系统: windows7 python 版本选择 目前比较常用的是python2.7 以及以后的版本, 尤其是python3.x后, python 增加了对unicode编码的支持, 以及一些其他特性(参考http://blog.jobbole.com/80006/), 更加方便, 所以这里推荐python3.x 安装 下载python3.6版本的windows安装包, 官网地址 https://www.python.org/ 下载链接: 32位系统下安装 https://www.python.org/ftp/python/3.6.1/python-3.6.1.exe 64位系统安装 https://www.python.org/ftp/python/3.6.1/python-3.6.1-amd64.exe 双击安装, 选择默认安装一路到底就行 python 环境配置 安装好了后, 我们可以通过cmd 运行python ctrl + r 输入cmd, enter后即可打开cmd 输入python 提示找不到python命令, 这个是因为python命令 还没有添加到环境变量中 配置如下 点击编辑, 将新安装的python目录添加到Path目录后面 比如你的python的安装目录是 C:\Users\xxxx\AppData\Local\Program\Python 点击编辑后, 在变量值的最后添加 ;C:\Users\xxxx\AppData\Local\Program\Python 注意, 别忘了分号 重启cmd, 再输入python, 就能进入python shell了 在python shell 里, 可以进行一些python的测试了 python包管理 环境配置完成后, 我们又想进行包管理, 如下 pip install requests 上面我们安装好python后, pip命令在$PYTHON_PATH/Scripts下, 比如 python 安装在 C:\Users\xxxx\AppData\Local\Program\Python下时, pip 就 在 C:\Users\xxxx\AppData\Local\Program\Python\Scripts

Continue reading 


redis sentinel 高可用(HA)方案部署,及python应用示例

󰃭 2017-06-17

简介 介绍 redis sentinel(哨兵)集群的部署,配置一主两从的redis集群,并通过 python 程序实例讲解通过 redis sentinel 访问集群 什么是哨兵(Sentinel)模式 Redis sentinel 为 Redis 集群提供了高可用解决方案,在集群出现故障的时候自动故障转移,保证集群的可用性 功能 监控:检查主从实例否是正常工作 通知:当 redis 实例出现错误的时候,可以使用程序(用 api 接口)通知管理员 自动故障转移:在主服务器发生故障时,哨兵开启故障转移处理,提升一台从服务器成为主服务器,其他的从服务器被重新配置使用新的主服务器,当应用程序连接时使用新的地址配置 配置信息:哨兵提供了认证和服务发现,客户端连接到哨兵去获取当前redis 主服务器地址,如果发生故障转移,哨兵将会汇报新的服务器地址 分布式系统 哨兵是一套分布式系统,它被设计成多个哨兵进程合作运行 当多个哨兵认为 master 故障的时候,集群就会认定主服务器故障 即使只有一个哨兵,它也能工作,系统具有较高的健壮性 哨兵,redis 实例,客户端在一起构成了一个大的分布式系统 配置方法 安装 3 台 redis 服务器,一主两从 下载 redis 3.2 版本 第1台修改 port: 10001 第2台修改 port: 10002 第3台修改 port: 10003 运行 redis 服务 # 首先设定第一个服务器为 master redis-server /path/to/server1.conf # 第二个为 slave redis-server /path/to/server2.conf # 第三个为 slave redis-server /path/to/server3.conf 创建三份配置文件 创建三份哨兵的配置文件 # 第1个哨兵配置,端口为 10011 port 10011 sentinel monitor mymaster 127.

Continue reading 


Python selenium 通过 IE 抓取动态页面数据的实例

󰃭 2017-06-17

介绍 使用 python, selenium 抓取 http://www.alibaba.com 的搜索列表页面的内容 什么是 selenium Selenium 是一个模拟浏览器,进行自动化测试的工具,它提供API与真实的浏览器内核交互 Selenium 跨语言,有Java、python等版本,支持多种浏览器,chrome、firefox以及IE 环境准备 安装 selenium, IEDriverServer IEDriverServer 是用来调用IE浏览器进行获取页面的命令 InternetExplorerDriver 下载页面 下载32位版本的 IEDriverServer,64位版本在ie11上运行有bug,输入框添加文本的时候很慢 把 IEDriverServer 放在系统 path 路径下 安装 python 环境 python 3.6.1 selenium bs4,解析页面内容 代码实例 #!/usr/bin/env python # coding: utf-8 import time # 提取页面内容的解析器 import bs4 as bs from selenium import webdriver def main(): # 打开 ie 进程实例 browser = webdriver.Ie() # 获取页面内容 browser.get(u'http://www.alibaba.com') # 查找搜索输入框,并清楚搜索框内的内容 browser.find_element_by_class_name("ui-searchbar-keyword").clear() # 输入搜索关键词 browser.

Continue reading 


日语N3常用词汇:か行

󰃭 2017-06-15

家 ~か カーテン ~会 ~かい 海岸 かいがん 会议 かいぎ 会场 かいじょう 会话 かいわ 帰り かえり 変える かえる 科学 かがく 镜 かがみ ~学部 ~がくぶ 饰る かざる 火事 かじ ガソリン ガソリンスタンド かた (読み方) 形 かたち 片付ける かたづける 胜つ かつ かっこう 悲しい かなしい 必ず かならず 金持ち かねもち 彼女 かのじょ 壁 かべ かまう (かまいません) 髪 かみ かむ 通う かよう ガラス 彼 かれ 彼ら かれら 乾く かわく 代わり かわり 変わる かわる 考える かんがえる 関系 かんけい 看护妇 かんごふ 简単 かんたん がんばる 気 き 机械 きかい 机会 きかい 危険 きけん 闻こえる きこえる 汽车 きしゃ 技术 ぎじゅつ 季节 きせつ 规则 きそく きっと 绢 きぬ 厳しい きびしい 気分 きぶん 决る きまる 君 きみ 决める きめる 気持ち きもち 着物 きもの 客 きゃく 急 きゅう 急行 きゅうこう 教育 きょういく 教会 きょうかい 竞争 きょうそう 兴味 きょうみ 近所 きんじょ 具合 ぐあい 空気 くうき 空港 くうこう 草 くさ くださる 首 くび 云 くも 比べる くらべる くれる 暮れる くれる ~君 ~くん け (髪の毛) け (毛のセータ) 计画 けいかく 警官 けいかん 経験 けいけん 経済 けいざい 警察 けいさつ けが 景色 けしき 下宿 げしゅく 决して けっして けれど けれども 轩 けん 原因 げんいん けんか 研究 けんきゅう 研究室 けんきゅうしつ 见物 けんぶつ 子 こ 御 ご こう (指示词) 郊外 こうがい 讲义 こうぎ 工业 こうぎょう 高校 こうこう 高等学校 こうとうがっこう 高校生 こうこうせい 工场 こうじょう 校长 こうちょう 交通 こうつう 讲堂 こうどう 公务员 こうむいん 国际 こくさい 心 こころ ~ございます 故障 こしょう ご存じ ごぞんじ 答 こたえ ごちそう こっち こと 小鸟 ことり このあいだ このごろ 细かい こまかい ごみ 込む こむ 米 こめ ごらんになる これから 怖い こわい 壊す こわす 壊れる こわれる コンサート 今度 こんど 今夜 こんや

Continue reading 


Python 模块内的全局变量

󰃭 2017-06-14

全局变量 这里的全局变量说的都是模块内的全局变量 name = 'Yi_Zhi_Yu' def test_a(): print(name) test_a() # Yi_Zhi_Yu 这里的name的 就是一个全局变量, 所以我们在模块的函数内可以直接打印 但如果在函数内修改name的话, 会发生什么呢 ame = 'Yi_Zhi_Yu' def test_a(): name = 'Tony' print(name) test_a() # Tony print(name) # Yi_Zhi_Yu 可以看出在函数内对全局变量name做修改的时候, name变成了局部变量, 但也仅限于函数内, 外部的全局变量依旧没有改变 那有没有什么方式能在函数内修改全局变量? global 关键字 global关键字 函数内的变量被声明为global后, 对该变量的的修改就可以影响到全局变量 name = 'Yi_Zhi_Yu' def test_a(): global name name = 'Tony' print(name) test_a() # Tony print(name) # Tony 可以看到全局变量被修改了 全局变量引入 c.py 文件里 name = 'Yi_Zhi_Yu' def test_a(): global name name = 'Tony' print('test_a:{}'.

Continue reading 


日语N3常用词汇:あ行

󰃭 2017-06-14

あ (感动词) ああ (指示词) あいさつ 间 あいだ 合う あう あかちゃん 上る あがる 赤ん坊 あかんぼう 空く あく あげる (お祝いをあげる) 朝寝坊 あさねぼう 味 あじ 明日 あす 游び あそび 集る あつまる 集める あつめる 谢る あやまる アルバイト 安心 あんしん 安全 あんぜん あんな 案内 あんない 以下 いか 以外 いがい いかが 医学 いがく 生きる いきる いくら~ても 意见 いけん 石 いし いじめる 以上 いじょう 急ぐ いそぐ 致す いたす いただく 一度 いちど 一生悬命 いっしょうけんめい いっぱい (副词) 糸 いと 以内 いない 田舎 いなか 祈る いのる いらっしゃる ~员 ~いん 植える うえる うかがう 受付 うけつけ 受ける うける 动く うごく うそ うち (この二つのうち) 打つ うつ 美しい うつくしい 写す うつす 移る うつる 腕 うで うまい 里 うら 売り场 うりば うるさい うれしい うん (応答) 运転手 うんてんしゅ 运転 うんてん 运动 うんどう エスカレーター 枝 えだ 选ぶ えらぶ 远虑 えんりょ おいでになる お祝い おいわい 応接间 おうせつま 多い おおい 大きな おおきな オートバイ オーバー おかげ おかしい ~おき 亿 おく 屋上 おくじょう 赠り物 おくりもの 送る おくる 遅れる おくれる お子さん おこさん 起す おこす 行う おこなう 怒る おこる 押し入れ おしいれ お嬢さん おじょうさん お宅 おたく 落る おちる おっしゃる 音 おと 落す おとす 踊り おどり 踊る おどる 惊く おどろく お祭り おまつり お见舞い おみまい お土産 おみやげ 思い出す おもいだす 思う おもう おもちゃ 表 おもて おや (感动词) 下りる おりる おる (“いる”の谦譲语) お礼 おれい 折れる おれる 终わり おわり

Continue reading 


日语三级词汇练习の一

󰃭 2017-06-14

1.さむいので ぼうしを ( 1)きました 2)かぶりました 3)はめました 4)はきました 2.わたしは いちにち さんかい はを ( )。 1)みがきます 2)そうじします 3)あらいます 4)そります 3.へやを でる ときは かぎを ( )ください。 1)つけて 2)はめて 3)かけて 4)うけて 4.うちに かえったら、すぐ シャワーを ( )たい。 1)あらい 2)はいり 3)あび 4)あけ 5.そのころは、だいがくを ( ) しごとが なかった。 1)はいっても 2)いれても 3)だしても 4)でても

Continue reading 


putty 终端连接设置

󰃭 2017-06-12

putty putty 是一款远程登录和管理工具,体积小, 安装快速, 设置简单, 很长的一段时间, 我在win系统上连接linux系统开发, 全都依赖这个神器, 那么我是如何使用这个神器的呢 安装 baidu putty关键字, 下载后点击即可打开 实际上, 下载的就是完整的exe文件, 并没有什么安装过程 我将其放入c盘, 然后创建桌面快捷方式 方便管理 打开后如图 ssh密码登录 现在, 我需要远程登录我的linux服务器, 如何设置呢 首先设置 ssh的 host 和 port, 再设置用户名 位置在 Connection > Data > Login details 下的Auto-login username, 如图 填入你的username, 点击open 即可登录 第一次连接时, 会有一个弹框, 如下, 点击是即可 输入密码, 即可登录 但是如果我们关闭这个登录窗口, 再想登录时, 还需要重新输入username, host, port, 比较麻烦. 别担心, putty可以记录下登录参数, 用以下次重新登录 保存登录信息 再上面我们的登录过程中, 填好host, port, username 后, 先别点open, 在Session下, 输入一个名, 点击save, 用以保存这个登录session信息, 如图

Continue reading 


pycharm pip 源修改以及包管理

󰃭 2017-06-08

pycharm 是一款进行python项目开发的利器, 不过还是有新手在使用pycharm时, 并不知道如何进行包管理, pip 包管理 pycharm 如何进行包管理呢, 其实很简答 安装 安装包流程如下 注意2位置, 是选择相应版本的python 解释器, 因为我们可能会用virtualenv 等工具安装多版本的隔离环境, 所以在做包管理的时候, 需要特别注意, 选择正确的的隔离环境 点击3 的按钮, 如上图: 输入包名, 进行搜索 选中搜索到的符合的包 点击 Install Package 进行安装即可 卸载 那如何卸载呢 选中已安装的包, 点击 - 号即可 pip 源设置 如果是命令行的方式使用pip, 请参考 https://www.u3v3.com/ar/1310 默认的pip 的源是 https://pypi.python.org/simple/ 这个是国外的源, 我们国内通过这个源安装包比较慢, 甚至无法安装, 所以我们需要将源改为我们国内的源 国内知名的几个源 豆瓣(douban) https://pypi.douban.com/simple 阿里云 https://mirrors.aliyun.com/pypi/simple 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 设置的流程如下 点击2部位的 + 号 点击红框按钮 上面的图中包含已经添加的源和管理按钮, 我之前以为已经将源改成了豆瓣的源, 你们应该看到的应该是 https://pypi.python.org/simple/ 点击 + - 和 编辑按钮, 改成 豆瓣, 阿里云 等国内知名的源即可

Continue reading 


Python实战经验讨论

󰃭 2017-06-07

我相信有好些朋友跟我一样,光是看书并没有一些实战经验,这方面的短板应该如何弥补呢?大家都是怎么处理的呢?

Continue reading 


python 之 globals 和 locals

󰃭 2017-06-06

globals 和 locals 两个内置函数, 分别用于表示全局变量和局部变量集合 globals 获取全局变量 这里的全局变量 是模块内的全局变量, 如下 g_name = 'Yi_Zhi_Yu' print(globals()) 输出如下 {'__name__': '__main__', '__doc__': '\n测试globals函数\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10c44c208>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/xxxx/globals.py', '__cached__': None, 'g_name': 'Yi_Zhi_Yu'} globals 输出了模块内的全局变量, 除了我们添加的g_name, 还有一些默认的属性列表 定义全局变量 如果我们通过globals 定义的全局变量, 是可以直接使用的, 如下 g = globals() g['g_setted_name'] = 'Tony' print(g_setted_name) # Tony globals 里的 g_setted_name 可以直接作为变量使用 在模块内定义的全局变量或者内置的全局变量, 会以key,value 的形式存储在globals 的字典中 有时, 我们从一个模块中的全局作用域, 用from xxx import var1 的方式引入的var1 其实就是以全局变量的形式存储在了globals 中, 所以我们可以直接使用var1, 如下

Continue reading 


Python 之变量作用域

󰃭 2017-06-04

什么是作用域 作用域, 直观的概念就是作用范围, 比如变量的可用范围, 方法的可用范围, 类的可用范围, 在这个范围内, 我们可以访问这个对象(变量/方法/类), 简而言之, 作用域是对变量/方法/类的访问的范围的限制 变量作用域 变量作用域 就是对变量访问的范围的限制, 比如, 定义了某个变量a, 那么在什么地方可以访问这个变量呢, 以下是我的总结 函数作用域 这是最直观的作用域, 我们在函数内定义了一个变量, 在这个函数内可以直接访问, 在函数外则访问不到 def test_a(): l_name = 'Yi_Zhi_Yu' print('test_a l_name:{}'.format(l_name)) test_a() # test_a l_name:Yi_Zhi_Yu 以上代码, 运行时能输出的变量l_name 处于 test_a 这个函数的函数作用域内, 在函数外不可访问 def test_a(): l_name = 'Yi_Zhi_Yu' print('test_a l_name:{}'.format(l_name)) test_a() # test_a l_name:Yi_Zhi_Yu print(l_name) 报错 test_a l_name:Yi_Zhi_Yu Traceback (most recent call last): File "/xxx/path/a.py", line 17, in <module> print(l_name) NameError: name 'l_name' is not defined 提示 l_name 未定义, 但函数内的变量依然打印出来了

Continue reading 


Python代码中下划线的含义

󰃭 2017-06-04

内容意译文于下面文章, 水平有限,欢迎指正。 The Meaning of Underscores in Python Python学习群:278529278 (欢迎交流) 前言 刚学习python的时候,对代码中下划线的用法很迷惑,有单下划线,双下环线,有前缀的,后缀的,还有两个都有的。到底这些特殊的表达对代码会有那些影响呢? 单双下划线作用于变量名和方法名上,有些时候下划线的用法只是大家约定俗成的默契,有些用法则会收到python解释器的影响。 常见五种用法罗列如下: 开头单下划线:_var 结尾单下划线:var_ 开头双下划线:__var 开头和结尾双下划线:__var__ 单一下划线:_ 命名开头单下划线:_var 单下划线只是python社区一个约定俗成的规定,用来提醒程序员以单下划线开头的变量和方法仅供类内部使用,不是公共接口的一部分。 python中并没有严格的私有方法和公有方法,这里单下划线更像一个善意的提醒。 class Test: def __init__(self): self.foo = 11 self._bar = 23 >>> t = Test() >>> t.foo 11 >>> t._bar 23 单下划线不会阻止你访问内部变量,他不是强制,而是善意的提示,全靠自觉。 但是开头单下划线会对模块导入产生影响 # This is my_module.py: def external_func(): return 23 def _internal_func(): return 42 >>> from my_module import * >>> external_func() 23 >>> _internal_func() NameError: "name '_internal_func' is not defined" 当使用* import的时候,python不会导入开头单下划线的变量和方法,除非这些内容在`all` 中被明确定义 当然也不建议使用这种导入方式

Continue reading 


python redis之连接池的原理

󰃭 2017-06-03

什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下, 这是没问题的, 但当并发量比较高的时候, 频繁的连接创建和释放对性能会有较高的影响 于是, 连接池就发挥作用了 连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作 这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能了 原理 那么, 在redis-py中, 他是怎么进行连接池管理的呢 连接池使用 首先看下如何进行连接池操作的 rdp = redis.ConnectionPool(host='127.0.0.1', port=6379, password='xxxxx') rdc = redis.StrictRedis(connection_pool=rdp) rdc.set('name', 'Yi_Zhi_Yu') rdc.get('name') 原理解析 当redis.ConnectionPool 实例化的时候, 做了什么 def __init__(self, connection_class=Connection, max_connections=None, **connection_kwargs): max_connections = max_connections or 2 ** 31 if not isinstance(max_connections, (int, long)) or max_connections < 0: raise ValueError('"max_connections" must be a positive integer') self.

Continue reading 


和大自然相关的日语词汇

󰃭 2017-05-30

太陽「たいよう」太阳 月「つき」月亮 星「ほし」星 朝日「あさひ」朝阳 夕日「ゆうひ」夕阳 風「かぜ」风 三日月「みかづき」新月,月牙 満月「まんげつ」满月 日蝕「にっしょく」日食,日蚀 月蝕「げっしょく」月食,月蚀 有明月「ありあけづき」(黎明)残月 流れ星「ながれぼし」流星 流星群「りゅうせいぐん」流星雨 青空「あおぞら」蓝天,青天,青空 俄か雨「にわかあめ」急雨,骤雨 嵐「あらし」暴风雨 雲「くも」云 霧「きり」雾 霜「しも」霜 稲光「いなびかり」闪电 氷「こおり」冰 雷「かみなり」雷 川「かわ」河 湖「みずうみ」湖

Continue reading 