第二篇:数值类型
来源:互联网 发布:零花钱软件赚钱靠谱吗 编辑:程序博客网 时间:2024/06/05 02:22
这一篇介绍与Python有关的数值类型和概念,夹杂着一些新的其它方面的概念。
1.3/4 == 0?
在python中,每个数都会关联到一个类型上的,3, 4默认为整型。
(python的一个好处是这些类型都不用声明,直接拿来就用。)
这里3/4 == 0 可以类比c中的int类型除法。结果向下取舍,就变成了0.
如果想得到一个满意的结果:
3.0 / 4.0就可以了。python看到小数点,自然明白这是float类型(flaot类型在python中类似于c中float/double)
2.** or pow()函数
旧版用**表示指数运算
新版用pow表示指数运算
x ** y 或 pow(x,y) 表示 x^y的值。python V2.6可以使用任意一种方式。
>>>2**38>>>pow(2,3)8
3.long类型
支持无限大的数(在内存,cpu承受能力之内),这真是太好啦。
>>>32894892384*323432904321063929058105096869888L
但是,浮点型做除法时,精度细节会丢掉:
>>>74239847324789274932747294723897492379487239472389472397423740823048230840283490238408230480238402840280482.0/42789423.01.735004637122339e+99
4.更一般的大数操作
此时需要使用python的一个模块:decimal
使用方法如下:
>>>d = decimal.Decimal('3.14') #你可以把d当成一个数,值为3.14>>>d + 1Decimal('4.141')
有了这个类,何愁精度太小呢?
import decimaldecimal.getcontext().prec = 200 #设置最多200位精度d1 = decimal.Decimal('1') #有没有引号无所谓d2 = decimal.Decimal(3)print(d1 / d2)0.333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
看看吧。和其它的高级语言一样,python默认的精度系统让人心寒:
>>> 0.1 + 0.1 + 0.1 - 0.35.551115123125783e-17
好在我们有Deciaml module:
>>> from decimal import Decimal>>> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')Decimal('0.0')>>> print(Decimal('0.0'))0.0
现在,精度的问题已经不是问题了。
5.分数代替小数
精度再大,都不能准确表示某些分数。看来要用分数模块了:fraction
from fractions import Fractionf = Fraction(2, 3) #2/3f = f + Fraction(1, 2)print(f)7/6
这里说明一下:
1.>>> 这个符号表示在IDLE中,提示输入的符号。后面设计的代码都是在eclipse里写的。所以也就省去了>>>
2.这里的结果是7/6。一般最后会把结果贴上。
3.from fractions import Fraction 表示从fractions里把Fraction暴露出来,以后就不需要使用fractions.Fraction怎么长的调用了。
4.由于导入的模块里的变量可以被你随便修改。使用reload(xxx)函数可以重新导入这个模块,清空被修改的状态:
>>>import math>>>math.pi3.141592653589793>>>math.pi = 10>>>math.pi10>>>reload(math)>>>math.pi3.141592653589793
当然了,如果小数已经产生了,怎么把它变成分数形式呢。可以这么做:
>>> (2.5).as_integer_ratio()(5, 2)
6.神奇的扩展
*号普遍被Python用来扩展元素:
>>>[1,2]*2[1, 2, 1, 2]>>>'hello'*2'hellohello'
7.查看type:
>>>a = 10>>>type(a) #不限于int, 可以查看任意object<type 'int'>
8.简单的oop(object oriented programming)
下面是一个简单的类。看看看懂了没?没看懂直接跳过,不要紧。
def 是函数定义标识。__int__是构造函数。每个成员函数传入self,用来给成员函数操作自己变量。
class Worker: def __int__(self, name, pay): #Initialize when created.类似于构造函数 self.name = name self.pay = pay def lastName(self): return self.name.split()[-1] def giveRaise(self, percent): sefl.pay *= (1.0 + percent) bob = Worker('Bob Smith', 11223)bob.lastName()
9.数类型
注意:复数不是3+4i.在python中也可以使用Complex(real, imag)创建复数。
10.进制转换
十进制到各进制的转换:
>>>a = 12>>>bin(a) #转为2进制>>>otc(a) #转为8进制>>>hex(a) #转为16进制
多种进制往10进制转换:
>>>int('64') #十进制>>>int('100', 8) #8进制>>>int('40', 16) #16进制>>>int('100000', 2) #2进制
将十进制转化为二进制,八进制和十六进制的另一种方法:
>>>'{0:b}, {1:o}, {2:x}'.format(64, 64, 64)
11.类型强制转换
int(num) long(num)和 float(num)数可以将数转换为int long float类型。
12.数值转化为string
>>>num = 1.0/3.0>>>repr(num)>>>str(num)
str(num)和repr(num)类似。但是repr会给出更多的细节。数值转化为string时,也可以格式化:
>>>num = 1/ 3.00.3333333333333331>>>'%e' % num string格式数值'3.3333333e-001'>>>'%4.2f' % num #可以调整格式'0.33'>>>'{0:4.2f}'.format(num) #2.6or3.0'0.33'
13.大小判断
可以使用更方便的方法来进行大小比较:
x = 5if 2 < x and x < 10: print('2<x<10')#equals to:x = 5if 2 < x < 10: print('2<x<10')
说明:
1.if 结构:
if 2 < 3: print('2<3')elif 2 < 2.5: print('2<2.5')else: print('2>=2.5')
这是一个经典的if-else-if结构。这里要注意, python中没有花括号来标明函数体。使用冒号和缩进表示。所以缩进要非常小心。同一层次的代码缩进要相同。同时冒号不能省略。
2.and or 等
python没有使用c-like语言的&& || 来表示且和或,而是使用and, or关键字。
14 / 操作符
python有两种除法操作:
/ 和 //
/ :表示整数相除,向下取整。小数不取整。
//:向下取整。
但是在3.0种。/ 在整数相除时,也不向下取整。
当然,你也可以在2.6中使用3.0这个功能:
>>>from __future__ import division
// 这种向下去整相当于math里的floor()函数
>>> import math>>> math.floor(2.5)2>>> math.floor(-2.5)-3>>> math.trunc(2.5)2>>> math.trunc(-2.5)-2
15. math
math module:数学工具包。这个模块感觉没什么好说的。只要是个像样的编程语言都会有这个扩展吧。
import mathmath.floor(2.55) #向下取整math.ceil(2.55) #向上取整math.trunc(2.55) #截取整数部分#题外话: round(2.55) #四舍五入math.sqrt(144) #== 144 ** .5
16.random
random module: 提供随机化操作。
>>>import random>>>random.random()0.4454848546546546546456>>>random.randint(1, 10)5>>>random.choice(['jinjin', 'yiyi'])'yiyi'
17.再次讨论set
set也可以通过函数set([1, 2, 3, 4])创建。和{1, 2, 3, 4}表达功能是一样的。
set可以通过add函数加入新的元素。通过remove删除已有的元素。
set可以完成一些巧妙的操作:
如果要删除[1, 2, 3, 3, 2, 1, 3]中重复的元素,这样操作:
>>> a = [1, 2, 3, 3, 2, 1, 3]>>> set(a)set([1, 2, 3])>>> a = list(set(a))>>> a[1, 2, 3]
seta > setb 表示 seta是否为setb的父集。
18.Bool
python中,True/False 为 bool类型。但是它们本质上是1和0
>>> True == 1True>>> False == 0True
19.eval
和MATLAB一样。python提供了一个命令模拟函数eval()。这体现了动态语言的特性。
下面给出eval 的简单用法。也给出它与exec函数的一些区别。
>>> eval('[1, 2, 3, 4]')[1, 2, 3, 4]>>> exec('print("hello")')hello>>> eval('print("hello")')Traceback (most recent call last): File "<pyshell#79>", line 1, in <module> eval('print("hello")') File "<string>", line 1 print("hello") ^SyntaxError: invalid syntax
19够了吗?python扩展
尽管python提供了上述很多数值操作的方法。但是对于科学计算还是不够的。于是有很多扩展可以增强python的数值计算能力。比如NumPy(Numeric Python)。
NumPy将在以后介绍到。
end.
- 第二篇:数值类型
- 数值类型
- 数值类型
- 数值类型
- 数值类型
- 第二篇:类型转换
- PostgreSQL学习篇9.2 数值类型
- 第二章 基本数字类型--字符串与数值型数据转换
- mysql中的数值类型
- C#数值类型
- 双目数值类型提升
- 自动编号数值类型
- mysql 的数值类型
- 类型转换 数值操作
- 判断数值类型
- python类型数值操作
- JavaScript----数值类型
- Oracle中的数值类型
- zoj 3699 Dakar Rally
- hdu 1312
- centos 安装jetty9
- hdu 1521(指数型母函数)
- 收藏几个网址
- 第二篇:数值类型
- ViewPager 循环切换
- OPencv笔记2:光流法检测——特征点
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- ant 批处理
- jquery实现商品拖动选择效果
- 记录用户在页面停留时间并写入数据库
- linux内核部件分析(一)——连通世界的list
- Asterisk功能说明及基本呼叫流程