python函数学习笔记 python函数的基本用法

Python学习笔记Python学习笔记_数据排序方法
Python对数据排序有两种方法python函数学习笔记:下面我们来简单分析下
1. 原地排序python函数学习笔记:采用sort()方法python函数学习笔记,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如:
代码如下:
data1=[4,2,6,432,78,43,22,896,42,677,12]
data1.sort()
data1#原来的顺序被替换
[2, 4, 6, 12, 22, 42, 43, 78, 432, 677, 896]
2. 复制排序:采用sorted()内置函数,按照指定的顺序排列数据后返回原数据的一个有序副本(原来的顺序保留) , 如:
代码如下:
data1=[4,2,6,432,78,43,22,896,42,677,12]
data2=sorted(data1)
data1
[4, 2, 6, 432, 78, 43, 22, 896, 42, 677, 12]#原顺序保留
data2
[2, 4, 6, 12, 22, 42, 43, 78, 432, 677, 896]#对副本排序
python3.4学习笔记 3.x和2.x的区别 , 持续更新python3.4学习笔记(四) 3.x和2.x的区别
在2.x中:print html,3.x中必须改成:print(html)
import urllib2
ImportError: No module named 'urllib2'
在python3.x里面 , 用urllib.request代替urllib2
import thread
ImportError: No module named 'thread'
在python3.x里面,用_thread(在前面加一个下划线)代替thread
在2.x中except Exception,e : 3.x中改为except (Exception):
=================================
print函数
虽然print语法是Python 3中一个很小的改动,且应该已经广为人知 , 但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来 。
在Python 2中使用额外的括号也是可以的 。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError 。
Python 2.7.6
print 'Python', python_version()
print 'Hello, World!'
print('Hello, World!')
print "text", ; print 'print more text on the same line'
输出:
Hello, World!
Hello, World!
text print more text on the same line
---------------------------
Python 3.4.1
print('Python', python_version())
print('Hello, World!')
print("some text,", end="")
print(' print more text on the same line')
输出:
Hello, World!
some text, print more text on the same line
print 'Hello, World!'
File "ipython-input-3-139a7c5835bd", line 1
print 'Hello, World!'
^
SyntaxError: invalid syntax
注意:在Python中,带不带括号输出”Hello World”都很正常 。
但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中 , print是一个语句,而不是函数调用 。
print 'Python', python_version()
print('a', 'b')
print 'a', 'b'
Python 2.7.7
('a', 'b')
a b
---------------------------------
整数除法
由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error) , 所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动 。
所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python
2环境下可能导致的错误(或与之相反,在Python 2脚本中用from __future__ import division来使用Python
3的除法) 。
Python 2.7.6
3 / 2 = 1
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
Python 3.4.1
3 / 2 = 1.5
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
---------------------------------
Unicode
Python 2有基于ASCII的str()类型 , 其可通过单独的unicode()函数转成unicode类型,但没有byte类型 。
而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays 。
Python 2.7.6
print type(unicode('this is like a python3 str type'))
type 'unicode'
print type(b'byte type does not exist')
type 'str'
print 'they are really'b' the same'
they are really the same
print type(bytearray(b'bytearray oddly does exist though'))
type 'bytearray'
Python 3.4.1 has class 'bytes'
print('and Python', python_version(), end="")
print(' also has', type(bytearray(b'bytearrays')))
and Python 3.4.1 also has class 'bytearray'
1
'note that we cannot add a string'b'bytes for data'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
ipython-input-13-d3e8942ccf81 in module()
---- 1 'note that we cannot add a string'b'bytes for data'
TypeError: Can't convert 'bytes' object to str implicitly
=================================
python 2.4 与 python 3.0 的比较
一、 print 从语句变为函数
原:print1,2 3
改为: print ( 1,2 3 )
二、range 与 xrange
原 : range( 0, 4 )结果 是 列表 [0,1,2,3 ]
改为:list( range(0,4) )
原 : xrange( 0, 4 )适用于 for 循环的变量控制
改为:range(0,4)
三、字符串
原: 字符串以 8-bit 字符串存储
改为: 字符串以 16-bit Unicode 字符串存储
四、try except 语句的变化
在2.x中except Exception,e : 3.x中改为except (Exception):
五、打开文件
原: file( ..... )
或 open(.....)
改为:
只能用 open(.....)
六、从键盘录入一个字符串
原: raw_input( "提示信息" )
改为: input( "提示信息" )
七、bytes 数据类型
A bytes object is an immutable array. The items are 8-bit bytes, represented by integers in the range 0 = x256.
bytes 可以看成是“字节数组”对象,每个元素是 8-bit 的字节,取值范围 0~255 。
由于在 python 3.0中字符串以 unicode 编码存储,当写入二进制文件时,字符串无法直接写入(或读?。?nbsp;, 必须以某种方式的编码为字节序列后,方可写入 。
(一)字符串编码(encode) 为 bytes
例:s = "张三abc12"
b = s.encode( 编码方式)
# b 就是 bytes 类型的数据
# 常用的编码方式为 : "uft-16", "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等
# 注 : 当字符串不能编码为指定的“编码方式”时 , 会引发异常
(二) bytes 解码(decode)为字符串
s = "张三abc12"
b = s.encode( "gbk")# 字符串 s 编码为 gbk 格式的字节序列
s1 = b.decode("gbk")# 将字节序列 b以gbk格式 解码为字符串
# 说明,当字节序列不能以指定的编码格式解码时会引发异常
(三)使用方法举例
#coding=gbk
f = open("c:\\1234.txt", "wb")
s = "张三李四abcd1234"
# -------------------------------
# 在 python2.4 中我们可以这样写:
# f.write( s )
# 但在 python 3.0中会引发异常
# -------------------------------
b = s.encode("gbk")
f.write( b )
f.close()
input("?")
读取该文件的例子:
#coding=gbk
f = open("c:\\1234.txt", "rb")
f.seek(0,2) #定位至文件尾
n = f.tell() #读取文件的字节数
f.seek(0,0) #重新定位至文件开始处
b = f.read( n )
# ------------------------------
# 在 python 2.4 中 b 是字符串类型
# 要 python 3.0 中 b 是 bytes 类型
# 因此需要按指定的编码方式确码
# ------------------------------
s = b.decode("gbk")
print ( s )
# ------------------------------
# 在 python 2.4 中 可以写作 print s 或 print ( s )
# 要 python 3.0 中 必须写作 print ( s )
# ------------------------------
f.close()
input("?")
运行后应显示:
张三李四abcd1234
(四) bytes序列,一但形成,其内容是不可变的,例:
s="ABCD"
b=s.encode("gbk")
print b[0]# 显示65
b[0] = 66
# 执行该句,出现异常: 'bytes' object does not support item assignment
八、 chr( K ) 与 ord( c )
python 2.4.2以前
chr( K )将编码K 转为字符,K的范围是 0 ~ 255
ord( c )取单个字符的编码, 返回值的范围: 0 ~ 255
python 3.0
chr( K )将编码K 转为字符,K的范围是 0 ~ 65535
ord( c )取单个字符的编码, 返回值的范围: 0 ~ 65535
九、 除法运算符
python 2.4.2以前
10/3结果为 3
python 3.0
10 / 3 结果为 3.3333333333333335
10 // 3 结果为 3
十、字节数组对象 --- 新增
(一) 初始化
a = bytearray(10 )
# a 是一个由十个字节组成的数组 , 其每个元素是一个字节,类型借用 int
# 此时 , 每个元素初始值为 0
(二) 字节数组 是可变的
a = bytearray(10 )
a[0] = 25
# 可以用赋值语句更改其元素 , 但所赋的值必须在 0 ~ 255 之间
(三)字节数组的切片仍是字节数组
(四)字符串转化为字节数组
#coding=gbk
s ="你好"
b = s.encode( "gbk")# 先将字符串按某种“GBK”编码方式转化为 bytes
c = bytearray( b )#再将 bytes 转化为 字节数组
也可以写作
c = bytearray( "你好", "gbk")
(五)字节数组转化为字符串
c = bytearray( 4 )
c[0] = 65 ; c[1]=66; c[2]= 67; c[3]= 68
s = c.decode( "gbk" )
print ( s )
# 应显示: ABCD
(六) 字节数组可用于写入文本文件
#coding=gbk
f = open("c:\\1234.txt", "wb")
s = "张三李四abcd1234"
# -------------------------------
# 在 python2.4 中我们可以这样写:
# f.write( s )
# 但在 python 3.0中会引发异常
# -------------------------------
b = s.encode("gbk")
f.write( b )
c=bytearray( "王五","gbk")
f.write( c )
f.close()
input("?")
Python笔记:命令行参数解析有些时候我们需要通过命令行将参数传递给脚本,C语言中有个getopt()方法,python中也有个类似的命令行参数解析方法getopt() 。python也提供了比getopt()更简洁的argparse方法 。另外,sys模块也可以实现简单的参数解析 , 本文将对这3种命令行参数解析方法简要介绍 。
sys.argv是传入的参数列表,sys.argv[0]是当前python脚本的名称,sys.argv[1]表示第一个参数,以此类推 。
命令行运行:
可以看到传入的参数通过sys.argv来获取,它就是一个参数列表 。
python的getopt与C语言的的getopt()函数类似 。相比于sys模块,支持长参数和短参数,并对参数解析赋值 。但它需要结合sys模块进行参数解析,语法格式如下:
短参数为单个英文字母,如果必须赋值需要在后面加英文冒号(:),长参数一般为字符串(相比短参数,更能说明参数含义) , 如果必须赋值需要在后面加等号(=) 。
命令行运行:
注意:短参数(options)和长参数(long_options)不需要一一对应,可以任意顺序,也可以只有短参数或者只有长参数 。
argparse模块提供了很多可以设置的参数 , 例如参数的默认值,帮助消息,参数的数据类型等 。argparse类主要包括ArgumentParser、add_argument和parse_args三个方法 。
下面介绍这三个函数的使用方法 。
argparse默认提供了-h | --help参数:
命令行运行:
下面列出部分参数:
下面来添加参数:
命令行运行:
parse_args() 方法用于解析参数 , 在前面的示例代码中使用parse_args方法来提取参数值,对于无效或者错误的参数会打印错误信息和帮助信息:
命令行运行:
本文介绍了Python的三种命令行参数解析方法sys.argv、getopt和argparse,可以根据自己的需要进行选择,getopt和argparse两种方法相比来说 , 建议选择argparse,代码量更少更简洁 。更详细的使用方法参考官方文档:
--THE END--
【python函数学习笔记 python函数的基本用法】关于python函数学习笔记和python函数的基本用法的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读