Python - Tips
01 - 10
01 - input与raw_input的区别
raw_input()只存在于python2.x版本中,这里也是比较python2.x版本中input与raw_input的区别。
input() #可以直接输入数字,但输入字符的要用引号''或者双引号""
raw_input() #将所有的输入都直接当作一串字符,可以不用加引号
当输入为纯数字时:
input返回的是数值类型,如int,float
raw_inpout返回的是字符串类型,string类型当输入为字符串表达式时:
input会计算在字符串中的数字表达式,而raw_input不会。
比如:输入"57 + 3": input会得到整数60,而raw_input会得到字符串"57 + 3"
其原理如下:input的定义
def input(prompt):
return (eval(raw_input(prompt)))
02 - 通过sys.path查看系统中的包路径
>>> import sys
>>> print sys.path
03 - Upgrade to new Python version in windows
Install the new Python version directly.
This update will replace your existing Python installation and no impact for site-packages.
04 - Upgrade python2.4 to python2.7 in CentOS-5
下载
# export http_proxy="http://10.144.1.10:8080" # 声明代理地址
# wget http://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
处理依赖关系
RuntimeError: Compression requires the (missing) zlib module
yum install zlib
yum install zlib-devel
ImportError: cannot import name HTTPSHandler
yum install openssl openssl-devel -y
安装
# tar -xvzf Python-2.7.12.tgz
# cd Python-2.7.12
[Python-2.7.12]# ./configure
[Python-2.7.12]# make # 根据Makefile编译源代码,连接,生成目标文件,可执行文件。
[Python-2.7.12]# make install # 将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。
[Python-2.7.12]# /usr/local/bin/python2.7 -V
[Python-2.7.12]# mv /usr/bin/python /usr/bin/python2.4.3 # 重命名原先的python
[Python-2.7.12]# ln -s /usr/local/bin/python2.7 /usr/bin/python # 建立软连接
[Python-2.7.12]# make clean # 仅仅是清除之前编译的可执行文件及配置文件。
[Python-2.7.12]# make distclean # 清除所有生成的文件。
确认
# ls -l /usr/bin/python*
lrwxrwxrwx 1 root root 24 09-01 11:21 /usr/bin/python -> /usr/local/bin/python2.7
lrwxrwxrwx 1 root root 6 07-07 21:44 /usr/bin/python2 -> python
-rwxr-xr-x 2 root root 5708 2013-01-09 /usr/bin/python2.4
-rwxr-xr-x 2 root root 5708 2013-01-09 /usr/bin/python2.4.3
# python -V
Python 2.7.12
yum问题处理
解决系统python软链接指向python2.7版本后,yum不能正常工作的方法:
将/usr/bin/yum的第一行#!/usr/bin/python
修改为#!/usr/bin/python2.4.3
,保存修改即可
05 - Windows系统安装lxml库
lxml
http://lxml.de/
Installing lxml
http://lxml.de/installation.html
Unofficial Windows Binaries for Python Extension Packages
点击如下链接下载相应版本的安装文件,例如:lxml-3.7.2-cp27-cp27m-win_amd64.whl
http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
D:\DownLoadFiles\Temp>python -m pip install lxml-3.7.2-cp27-cp27m-win_amd64.whl
Processing d:\downloadfiles\temp\lxml-3.7.2-cp27-cp27m-win_amd64.whl
Installing collected packages: lxml
Successfully installed lxml-3.7.2
D:\DownLoadFiles\Temp>pip show lxml
Name: lxml
Version: 3.7.2
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: lxml-dev@lxml.de
License: UNKNOWN
Location: c:\python27\lib\site-packages
Requires:
D:\DownLoadFiles\Temp>
06 - 获取Python版本的新特性信息
https://docs.python.org/ » Python » Documentation » What’s New in Python
07 - Python查询whois
可以使用whois模块来进行whois查询(使用43端口,注意本地网络是否开启43端口);
例如:“print(whois.whois('http://www.csdn.net'))”
08 - Python中的赋值、浅拷贝与深拷贝
import copy
tu = (1, 2, 3) # 不可变对象,不区分深拷贝和浅拷贝,其拷贝后的值和地址值不变
a = tu # 值相等,地址相等
b = copy.copy(tu) # 值相等,地址相等
c = copy.deepcopy(tu) # 值相等,地址相等
print("### 不可变对象:", tu, id(tu))
print("浅拷贝-赋值:", a, id(a))
print("浅拷贝-copy.copy():", b, id(b))
print("深拷贝-copy.deepcopy():", c, id(c))
li = [111, 222, 333] # 可变对象,深浅拷贝都是对源对象的复制,占用不同的内存空间
aaa = li # 值相等,地址相等
bbb = copy.copy(li) # 值相等,地址不相等
ccc = copy.deepcopy(li) # 值相等,地址不相等
print("### 可变对象:", li, id(li))
print("浅拷贝-赋值:", aaa, id(aaa))
print("浅拷贝-copy.copy():", bbb, id(bbb))
print("深拷贝-copy.deepcopy():", ccc, id(ccc))
09 - 主流的Python实现方式
Python解释器
Python实际上是一门语言规范,定义应该具备哪些语言要素,应当能完成什么样的任务;
语言规范可以通过不同的方式实现,例如使用C实现,或者C++、Java、C#、JavaScript,甚至Python实现;
实现指的是符合python语言规范的解释程序以及标准库;
CPython:
- http://cython.org/
- http://docs.cython.org/
- http://docs.cython.org/src/quickstart/
- 使用C语言编写,将Python源码编译成CPython字节码,由虚拟机解释执行;
- 是经典的标准的Python解释器,也是其他Python编译器的参考实现,通常“Python”大都是指CPython;
- 如果需要广泛用到C编写的第三方扩展,或让Python代码能够被大多数用户直接使用,建议使用CPython;
Jython:
- 使用Java编写在JVM上实现的Python,将Python源代码编译成Java字节码,在JVM中运行;
- 可以在Python语言中使用JVM上其他语言编写的库和函数,反之亦然。
- 如果在JVM上使用Python简化流程,或者在Python中使用Java代码,同时无需太多CPython扩展,推荐Jython;
IronPython:使用C#编写运行在.NET平台的Python实现,可在Python中使用.NET的库与类,反之亦然;
PyPy:研究项目,使用Python语言编写的Pyhon实现,旨在于使其能快速且方便的改进解释器;
10 - Python单语句块
如果语句块只包括单独的一句语句,那么可以在同一行指定。
单个语句是在原地立即使用的,不会被看作一个单独的块。
为了易于检查错误,尽量避免使用这种快捷方法。
>>> flag = True
>>> if flag: print('Yes')
Yes
11 - 20
11 - 通过PyMySQL连接数据库报错
错误-1:
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '192.168.16.200' ([Errno 111] Connection refused)")
原因:MySQL服务的绑定地址并不是192.168.16.200。
处理方法:这里修改了"/etc/mysql/mysql.conf.d/mysqld.cnf"配置文件中的绑定地址为“bind-address = 192.168.16.200”。
root@Ubuntu16:~# netstat -anp |grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3222/mysqld
root@Ubuntu16:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
root@Ubuntu16:~# service mysql restart
root@Ubuntu16:~# netstat -anp |grep 3306
tcp 0 0 192.168.16.200:3306 0.0.0.0:* LISTEN 3940/mysqld
错误-2:
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'192.168.16.200' (using password: YES)")
原因:没有为root用户开放外部访问权限。
处理方法:允许root用户使用密码从任何主机连接到mysql服务器.
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'anliven' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
12 - antigravity模块
命令行下执行“import antigravity”,可以打开漫画地址(https://xkcd.com/353/),浏览一部“关于浪漫、讽刺、数学和语言的网络漫画”(A webcomic of romance, sarcasm, math, and language.)。
13 - 不可变对象与可变对象
- 不可变对象调用对象自身的方法,不会改变该对象自身的内容,而是创建新的对象并返回,这样就保证了不可变对象本身永远不可变;
- 可变对象调用对象自身的方法,会改变该对象自身的内容;
- 函数的默认参数必须指向不变对象!
st = "abc" # string是不可变对象,变量st指向的对象内容是'abc','abc'才是字符串对象
st_new = st.replace("a", "A") # replace方法创建一个新字符串并返回,并没有改变对象内容
print("after: ", st, st_new)
li = ['333', '222', '111'] # list是可变对象
li_new = li.sort() # sort方法改变对象自身内容,没有返回值
print("after: ", li, li_new)
结果
after: abc Abc
after: ['111', '222', '333'] None
14 - “future”模块
Python的新版本中会引入新的功能特性,或者对原来的功能特性作一些改动。
而有些改动是不兼容旧版本的,也就是说,在当前版本运行正常的代码,在新版本中就无法正常运行。
Python的__future__模块,可以把下一个新版本的特性导入到当前版本,这样就可以在当前版本中测试一些新版本的特性。
一般情况下,都是利用__future__模块在Python 2.x环境中对Python 3.x的特性做试用和验证。
$ py -2
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> 2 / 3
0
>>> 2.0 / 3
0.6666666666666666
>>>
>>> from __future__ import division
>>> 2 / 3
0.6666666666666666
>>> 2.0 / 3
0.6666666666666666
>>> 2 // 3
0
>>>
>>> import __future__
>>> dir(__future__)
['CO_FUTURE_ABSOLUTE_IMPORT', 'CO_FUTURE_DIVISION', 'CO_FUTURE_PRINT_FUNCTION', 'CO_FUTURE_UNICODE_LITERALS', 'CO_FUTURE_WITH_STATEMENT', 'CO_GENERATOR_ALLOWED', 'CO_NESTED', '_Feature', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'absolute_import', 'all_feature_names', 'division', 'generators', 'nested_scopes', 'print_function', 'unicode_literals', 'with_statement']
>>> help(__future__)
Help on module __future__:
NAME
__future__ - Record of phased-in incompatible language changes.
......
15 - Python实现斐波那契数列
def fab(x):
s = [1, 2]
for i in range(x - 2):
s.append(s[-1] + s[-2])
return (s)
print(fab(5))
def fab2(max):
n, a, b = 0, 0, 1
while n < max:
a, b = b, a + b
print(b)
n += 1
fab2(5)
16 - 标准库os模块的常用方法
os.remove() 删除文件
os.rename() 重命名文件
os.walk() 生成目录树下的所有文件名
os.chdir() 改变目录
os.mkdir/makedirs 创建目录/多层目录
os.rmdir/removedirs 删除目录/多层目录
os.listdir() 列出指定目录的文件
os.getcwd() 取得当前工作目录
os.chmod() 改变目录权限
os.path.basename() 去掉目录路径,返回文件名
os.path.dirname() 去掉文件名,返回目录路径
os.path.join() 将分离的各部分组合成一个路径名
os.path.split() 返回(dirname(),basename())元组
os.path.splitext() (返回filename,extension)元组
os.path.getatime\ctime\mtime 分别返回最近访问、创建、修改时间
os.path.getsize() 返回文件大小
os.path.exists() 是否存在
os.path.isabs() 是否为绝对路径
os.path.isdir() 是否为目录
os.path.isfile() 是否为文件
17 - 标准库sys模块的常用方法
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.modules.keys() 返回所有已经导入的模块列表
sys.exc_info() 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
sys.exit(n) 退出程序,正常退出时exit(0)
sys.hexversion 获取Python解释程序的版本值,16进制格式如:0x020403F0
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.maxunicode 最大的Unicode值
sys.modules 返回系统导入的模块字段,key是模块名,value是模块
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout 标准输出
sys.stdin 标准输入
sys.stderr 错误输出
sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息
sys.exec_prefix 返回平台独立的python文件安装的位置
sys.byteorder 本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'
sys.copyright 记录python版权相关的东西
sys.api_version 解释器的C的API版本
sys.version_info python版本信息
18 - 报错“Microsoft Visual C++ 14.0 is required”
问题现象:
使用pip安装line_profiler时,报错“error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools”。
guowli@5CG450158J MINGW64 /d/CI-Git-Files
$ pip3 install line_profiler --proxy="10.144.1.10:8080"
......
......
......
Requirement already satisfied: ipython-genutils in c:\python36\lib\site-packages (from traitlets>=4.2->IPython>=0.13->line_profiler) (0.2.0)
Installing collected packages: line-profiler
Running setup.py install for line-profiler ... error
......
......
......
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
......
......
......
处理方法:
改用离线安装方式。在(http://www.lfd.uci.edu/~gohlke/pythonlibs/)下载对应Python模块的运行环境,并在命令行下安装。
示例:
找到第三方库line_profiler的对应版本的离线安装包(https://www.lfd.uci.edu/~gohlke/pythonlibs/#line_profiler)
在命令行下,安装此运行环境:pip3 install line_profiler-2.1.2-cp36-cp36m-win_amd64.whl
。
19 - 常用于数据类型转换的内置函数(Python3)
Binary Sequence Types
- bytes():Return a new “bytes” object.
- bytearray():Return a new array of bytes.
- memoryview(obj):Return a “memory view” object created from the given argument.
Numeric Types
- int(): Return an integer object constructed from a number or string.
- float(): Return a floating point number constructed from a number or string
- complex(): Return a complex number.
Iterator Types
- iter(): Return an iterator object.
Text Sequence Type
- str(): Return a str version of object.
- repr(): Return a string containing a printable representation of an object.
Sequence Types
- list()
- tuple()
- range()
Mapping Types
- dict()
Set Types
- set(): Return a new set object, optionally with elements taken from iterable.
- frozenset(): Return a new frozenset object, optionally with elements taken from iterable.
Others
- bin(x): Convert an integer number to a binary string prefixed with “0b”.
- bool([x]): Return a Boolean value, i.e. one of True or False.
- ord(c): Given a string representing one Unicode character, return an integer.
- chr(i): Return the string representing a character whose Unicode code point is the integer i.
- oct(x): Convert an integer number to an octal string prefixed with “0o”.
- hex(x): Convert an integer number to a lowercase hexadecimal string prefixed with “0x”.
20 - pipenv
尽管 pip 可以安装 Python 包, 但仍推荐使用 Pipenv,因为它是一种更高级的工具,可简化依赖关系管理的常见使用情况;
Pipenv:Python Dev Workflow for Humans
- HomePage:https://github.com/pypa/pipenv
- Docs:https://docs.pipenv.org/
- Basics:https://docs.pipenv.org/basics/
参考信息
- Pipenv & 虚拟环境:https://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html
21 - 30
21 - 查看Python环境是否是64位
方法:1:查看提示信息
$ python
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
$ py -3
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
方法2:查看platform信息
>>> import platform
>>> platform.architecture()
('64bit', 'WindowsPE')
22 - 查看对象的内存占用
import sys
x = 1 # 一个32比特的整数在 Python3中占用28字节
print(sys.getsizeof(x))
Python - Tips的更多相关文章
- [转]Python tips: 什么是*args和**kwargs?
Python tips: 什么是*args和**kwargs? 原文地址:http://www.cnblogs.com/fengmk2/archive/2008/04/21/1163766.html ...
- Python Tips阅读摘要
发现了一本关于Python精通知识点的好书<Python Tips>,关于Python的进阶的技巧.摘录一些比较有价值的内容作为分享. *args and **kwargs 在函数定义的时 ...
- python tips(持续更新中)
python tips 可变对象与不可变对象 在python中,可变对象有数值类型(int,float),字符串(str),元组(tuple),可变对象有列表(list),字典(dict),集合(se ...
- 【转载】Python tips: 什么是*args和**kwargs?
转自Python tips: 什么是*args和**kwargs? 先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwa ...
- python tips(持续更新)
1. 引用上一层目录 import syssys.path.append('..')import xx 2. python json JSON是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...
- Python Tips and Traps(一)
1.如果想得到一个列表的index和内容,可以通过enumerate快速实现 drinks = ['coffee','tea', 'milk', 'water'] for index, drink i ...
- Python tips: 什么是*args和**kwargs?
推荐查看:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00137473844 ...
- Python tips(
(此文是在实际工程中遇到的一些小问题,给予解决和整理.解决方法大多来自网上零散的文章.有一个系统化的Python问题解决方案,来自<Python 3 学习笔记>雨痕著,其中对Python的 ...
- python tips(3);import的机制
1.标准的import python中,所有加载到内存中的模块都是放在sys.modules中,当import一个模块的时候,会在这个列表中查看是否加载了这个模块,如果加载了,则只是将模块名字加入到正 ...
随机推荐
- 有关google的小问题
从本周的开始,突然发现自己的浏览器打不开google了,我的默认浏览器是qq的,不过使用的也是google搜索.刚开始我以为是浏览器中毒了,就重新下了一个,结果还是同样的情况,而且我使用搜狗或者百度的 ...
- Online Judge中基本的输入输出
一.利用c语言处理输入和输出 1.输入: 在C语言中输入中stdin指针表示标准的输入,scanf默认读取的就是stdin指向的输入,在acm中我们可能需要不断的测试,最好将stdin重定向到某一个文 ...
- 无法将类型为“System.Decimal”的对象强制转换为类型“System.Char[]”。
在用微软的SSIS操作ORACLE 数据源的时候碰到以下报错信息: [ADO NET Destination [13455]] 错误: 数据插入期间出现异常,从提供程序返回的消息为:无法将类型为&qu ...
- PDF
源代码请从这里下载: http://download.csdn.net/source/2984395 使用的是JSP编程 这是导出后的效果 这是数据库中的内容 部分代码: <%@ p ...
- Dubbo框架选型
一.为什么会是dubbo 1.Dubbo是一个分布式服务框架,提供RPC(远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.) 远程服务调用方案,以及SOA ...
- StrongSwan 5.1.1 发布,Linux 的 IPsec 项目
StrongSwan是一个完整的2.4和2.6的Linux内核下的IPsec和IKEv1 的实现.它也完全支持新的IKEv2协议的Linux 2.6内核.结合IKEv1和IKEv2模式与大多数其他基于 ...
- CrossOver 13.0 发布,Windows 模拟器
允许在 Linux 和 OS X 平台运行 Win32 程序的 CrossOver 套件发布 13.0 版本,带来了完全重构的 3D 处理流程,将大幅度提高游戏性能. Linux 平台相关变化有: 带 ...
- 使用ABP时报错“UPDATE 语句与 FOREIGN KEY SAME TABLE 约束"FK_dbo.AbpUsers_dbo.AbpUsers_LastModifierUserId"冲突”的解决办法
ABP理论学习总目录 一步一步使用ABP框架搭建正式项目系列教程 ABP之Module-Zero学习目录 本篇目录 问题 原因 解决办法 问题 问题的是在下面这种情况下出现的: 我在使用CodeFir ...
- ENode 2.0 - 第一个真实案例剖析-一个简易论坛(Forum)
前言 经过不断的坚持和努力,ENode 2.0的第一个真实案例终于出来了.这个案例是一个简易的论坛,开发这个论坛的初衷是为了验证用ENode框架来开发一个真实项目的可行性.目前这个论坛在UI上是使用了 ...
- PostgreSQL基础整理(一)
1. 创建数据库: 1)登录bin目录,createdb.exe -U postgres -e mydb; -U 表示本次操作的登录用户名,如果不写会取windows登录的账户,如Administra ...