首页 文章 精选 留言 我的

精选列表

搜索[编写],共10000篇文章
优秀的个人博客,低调大师

我们在编写python代码时应该注意那几件事 !

前言在编程过程中,多了解语言周边的一些知识,以及一些技巧,可以让你加速成为一个优秀的程序员。 对于Python程序员,你需要注意一下本文所提到的这些事情。 你也可以看看Zen of Python(Python之禅),这里面提到了一些注意事项,并配以示例,可以帮助你快速提高。 1. 漂亮胜于丑陋实现一个功能:读取一列数据,只返回偶数并除以2。下面的代码,哪个更好一些呢? halve_evens_only = lambda nums: map(lambda i: i/2, filter(lambda i: not i%2, nums)) VS def halve_evens_only(nums): return [i/2 for i in nums if not i % 2] 2. 记住Python中非常简单的事情 # 交换两个变量 a, b = b, a # 切片(slice)操作符中的step参数。(切片操作符在python中的原型是[start:stop:step],即:[开始索引:结束索引:步长值]) a = [1,2,3,4,5] >>> a[::2] # 遍历列表中增量为2的数据 [1,3,5] # 特殊情况下,`x[::-1]`是实现x逆序的实用的方式 >>> a[::-1] [5,4,3,2,1] # 逆序并切片 >>> x[::-1] [5, 4, 3, 2, 1] >>> x[::-2] [5, 3, 1] 3. 不要使用可变对象作为默认值 def function(x, l=[]): #不要这样 def function(x, l=None): # 好的方式 if l is None: l = [] 这是因为当def声明被执行时,默认参数总是被评估。 使用iteritems而不是items 使用generators ,因此当通过非常大的列表进行迭代时,iteritems 更好一些。 d = {1: "1", 2: "2", 3: "3"} for key, val in d.items() # 当调用时构建完整的列表 for key, val in d.iteritems() # 当请求时只调用值 5. 使用isinstance ,而不是type # 不要这样做 if type(s) == type(""): ... if type(seq) == list or \ type(seq) == tuple: ... # 应该这样 if isinstance(s, basestring): ... if isinstance(seq, (list, tuple)): ... 注意我使用的是basestring 而不是str,因为如果一个unicode对象是字符串的话,可能会试图进行检查。例如: >>> a=u'aaaa' >>> print isinstance(a, basestring) True >>> print isinstance(a, str) False``` 这是因为在Python 3.0以下版本中,有两个字符串类型str 和unicode。 **6. 了解各种容器** Python有各种容器数据类型,在特定的情况下,相比内置容器(如list 和dict ),这是更好的选择。 我敢肯定,大部分人不使用它。我身边一些粗心大意的人,一些可能会用下面的方式来写代码。 freqs = {}for c in "abracadabra": try: freqs[c] += 1 except: freqs[c] = 1``` 也有人会说下面是一个更好的解决方案: freqs = {} for c in "abracadabra": freqs[c] = freqs.get(c, 0) + 1 更确切来说,应该使用collection 类型defaultdict。 from collections import defaultdict freqs = defaultdict(int) for c in "abracadabra": freqs[c] += 1 其他容器: namedtuple() # 工厂函数,用于创建带命名字段的元组子类 deque # 类似列表的容器,允许任意端快速附加和取出 Counter # dict子类,用于哈希对象计数 OrderedDict # dict子类,用于存储添加的命令记录 defaultdict # dict子类,用于调用工厂函数,以补充缺失的值 学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习python或者有兴趣学习python的伙伴可以私信回复小编“学习”或者评论,留言,点赞 领取全套免费python学习资料、视频()装包 7. Python中创建类的魔术方法(magic methods) __eq__(self, other) # 定义 == 运算符的行为 __ne__(self, other) # 定义 != 运算符的行为 __lt__(self, other) # 定义 < 运算符的行为 __gt__(self, other) # 定义 > 运算符的行为 __le__(self, other) # 定义 <= 运算符的行为 __ge__(self, other) # 定义 >= 运算符的行为 8. 必要时使用Ellipsis(省略号“...”) Ellipsis 是用来对高维数据结构进行切片的。作为切片(:)插入,来扩展多维切片到所有的维度。例如: >>> from numpy import arange >>> a = arange(16).reshape(2,2,2,2) # 现在,有了一个4维矩阵2x2x2x2,如果选择4维矩阵中所有的首元素,你可以使用ellipsis符号。 >>> a[..., 0].flatten() array([ 0, 2, 4, 6, 8, 10, 12, 14]) # 这相当于 >>> a[:,:,:,0].flatten() array([ 0, 2, 4, 6, 8, 10, 12, 14])

优秀的个人博客,低调大师

如何在Python中编写精美图形界面

在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言。 其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式,以达到美化图形界面的目的。 本篇文章中,我们就通过一个实际的例子,使用QSS和PyQt5的配置属性,实现图形用户界面的美化工作。 首先上效果图: 使用到的图片素材有9张音乐的封面图片: 需要素材的小伙伴可以在微信公众号回复关键词“0013”获取下载链接。 一、对界面进行布局和组件的布置 在图像界面编程中,一个好的布局有助于全局把控界面的形态,而在PyQt5中,有多种布局的方式供我们选择,比较常用的布局有以下几种: ● 表单布局:QFormLayout ● 网格布局:QGridLayout ● 水平排列布局:QHBoxLayout ● 垂直

优秀的个人博客,低调大师

DockerFile的编写和注意的一些知识点

CMD,RUN,ENTRYPOINT之类的差别。 VOLUMN和-V之间的差别。 EXPOSE和-P的对应等。 今天上午写了一个脚本,可以传参数进IMAGE,让启动的CONTAINER具有不同的行为。 另外是一些常用的方便命令: 删除所有正在运行的容器(先停止,再删除)。 docker stop $(docker ps -q) && docker rm $(docker ps -a -q) 启动镜像(包括端口映射,目录挂载-如果windows,那不是挂windows目录,是虚拟机目录,命令容器,传递参数) docker run -p 8889:80 -v /applog:/var/log/nginx --name testprism333 prism3 -e PRD ============================= 如果在Dockerfile中同时写了entrypoint和cmd,docker在build过程中会将cmd中指定的内容作为entrypoint的参数。 那么如果,我们希望每个容器都固定的执行一个config脚本,然后再运行特定的程序时,利用entrypoint和cmd可以如何做到呢?从上述分析可以很自然的想到,将entrypoint解析CMD参数,并以命令执行。 CMD命令的参数格式,一般写成 字符串数组的方式,如上面的例子。如: CMD ["echo","hello world"] 虽然也可写成CMD echo hello word 方式,但这样docker会在指定的命令前加 /bin/sh -c 执行,有时有可能会出问题。 所以推荐采用数据结构的方式来存放命令。 dockerfile 中的 ENTRYPOINT 和 CMD 看似一样,都是实现 container 启动命令,但是需要注意: 1、都有两种方式,数组方式,以及 shell 方式 ? 1 2 [ "sh" , "-c" , "echo hello" ] sh -c 'echo hello' 2、ENTRYPOINT 除了指定 container 入口之外,更重要的作用是: 通过它可以让一个 container 像一个 executable 一样。比如 ? 1 ENTRYPOINT ["/bin/sh"] 之后 build 出来的镜像就像一个 sh 程序文件一样,运行该 image,就像运行 sh 程序。 3、如果 ENTRYPOINT 指定了,并且采用了数组方式,即["exectable", "para1", "para2"],那么 CMD 指定的内容会被视为 ENTRYPOINT 数组中最后的一个参数 4、如果 ENTRYPOINT 使用 shell 方式,那么它会覆盖所有的 CMD 以及docker run后面指定的 command 5、docker run后面指定的 command 会取代 CMD 的内容 ============================= From nginx MAINTAINER Prism DevOps@pxx.com.cn WORKDIR /usr/local/nginx/html ENV NGINX_ROOT_DIR /usr/local/nginx/html VOLUME ["/applog", "/data"] RUN mkdir -p /var/devops/ COPY bootstart.sh /var/devops/bootstart.sh ENTRYPOINT ["/bin/bash", "/var/devops/bootstart.sh"] CMD ["-h"] #!/bin/bash # description: dockerfile function depend on CMD and ENTRYPOINT arg # author: chngjun855 # version alpha # date 2017-05-18 # get args while getopts "e:i:g:h" arg do case $arg in e) env=$OPTARG ;; i) ipaddr=$OPTARG ;; g) group=$OPTARG ;; h) echo "/bin/bash bootstart.sh -e [ENV] -i [ipaddress] -g [group]" ;; ?) echo "unknow argument, -e -i -g" exit 1 esac done echo "env is $env" echo "ipaddr is $ipaddr" echo "group is $group" # different function depend on different env arg case $env in FAT) echo "FAT html page" > /usr/share/nginx/html/test.html ;; UAT) echo "UAT html page" > /usr/share/nginx/html/test.html ;; PRD) echo "PRD html page" > /usr/share/nginx/html/test.html ;; esac nginx -g "daemon off;"

优秀的个人博客,低调大师

ipython notebook 浏览器中编写数学公式和现实

Python Notebook简介1 http://www.cnblogs.com/cbscan/p/3545084.html $ python -m IPython http://pypi.python.org/pypi/pip#downloads #python setup.py install $ git clone --recursive https://github.com/ipython/ipython.git $ cd ipython $ pip install -e ".[notebook]" --user yum install python-devel #Python.h缺少的错误 https://github.com/zeromq/pyzmq/releases http://doc.libsodium.org/ http://www.cnblogs.com/Cherise/p/4351022.html 源码安装ipython,并在ipython中整合spark

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册