Python内置函数range

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python内置函数range相关的知识,希望对你有一定的参考价值。

参考技术A

range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。

range 构造器的参数必须为整数(可以是内置的 int 或任何实现了 __index__ 特殊方法的对象)。 如果省略 step 参数,其默认值为 1 。 如果省略 start 参数,其默认值为 0 ,如果 step 为零则会引发 ValueError。

如果 step 为正值,确定 range r 内容的公式为 r[i] = start + step*i 其中 i >= 0 且 r[i] < stop 。

如果 step 为负值,确定 range 内容的公式仍然为 r[i] = start + step*i ,但限制条件改为 i >= 0 且 r[i] > stop .

如果 r[0] 不符合值的限制条件,则该 range 对象为空。 range 对象确实支持负索引,但是会将其解读为从正索引所确定的序列的末尾开始索引。

元素绝对值大于 sys.maxsize 的 range 对象是被允许的,但某些特性 (例如 len()) 可能引发 OverflowError。

一些 range 对象的例子:

range 对象实现了 一般 序列的所有操作,但拼接和重复除外(这是由于 range 对象只能表示符合严格模式的序列,而重复和拼接通常都会违反这样的模式)。

start

start 形参的值 (如果该形参未提供则为 0 )

stop

stop 形参的值

step

step 形参的值 (如果该形参未提供则为 1 )

range 类型相比常规 list 或 tuple 的优势在于一个 range 对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了 start , stop 和 step 值,并会根据需要计算具体单项或子范围的值)。

range 对象实现了 collections.abc.Sequence ABC,提供如包含检测、元素索引查找、切片等特性,并支持负索引

使用 == 和 != 检测 range 对象是否相等是将其作为序列来比较。 也就是说,如果两个 range 对象表示相同的值序列就认为它们是相等的。 (请注意比较结果相等的两个 range 对象可能会具有不同的 start, stop 和 step 属性,例如 range(0) == range(2, 1, 3) 而 range(0, 3, 2) == range(0, 4, 2) 。)

在 3.2 版更改: 实现 Sequence ABC。 支持切片和负数索引。 使用 int 对象在固定时间内进行成员检测,而不是逐一迭代所有项。

在 3.3 版更改: 定义 \'==\' 和 \'!=\' 以根据 range 对象所定义的值序列来进行比较(而不是根据对象的标识)。

3.3 新版功能: start, stop 和 step 属性。

Python之路——内置函数

内置函数一

  1 # locals()\globals()\global\nonlocal
  2 # print(locals())
  3 # print(globals())
  4 
  5 # 迭代器.__next__()
  6 # next(Itrator)
  7 # 迭代器 = iter(Iterable)
  8 # 迭代器 = 可迭代的.__iter__()
  9 
 10 # range
 11 # range(10)
 12 # range(1,11)
 13 # print(‘__next__‘ in dir(range(1,11,2)))   # False
 14 
 15 
 16 # dir 查看一个变量拥有的方法
 17 # print(dir([]))
 18 # print(dir(1))
 19 
 20 # callable
 21 # print(callable(print))
 22 
 23 # help
 24 # help(str)
 25 
 26 #某个方法属于某个数据类型的变量,就用.调用
 27 # 如果某个方法不依赖于任何数据类型,就直接调用 -- 内置函数
 28 
 29 # import time
 30 # # t = __import__(‘time‘)
 31 # # print(t.time())
 32 
 33 # open
 34 
 35 # id 返回一个变量的内存地址
 36 # hash
 37 # print(hash(132))
 38 # print(hash(‘adasd‘))
 39 # print(hash((‘1‘,‘aaa‘)))
 40 # prograss Bar
 41 # **************************************************
 42 # print
 43 # print(‘womendezuguoshuayuan‘,end=‘‘) # 指定输出的结束符
 44 # print(‘womendezuguoshuayuan‘)
 45 # print(1,2,3,4,5,sep=‘|‘)    # 1|2|3|4|5
 46 
 47 # f = open(‘file‘,‘w‘,encoding=‘utf-8‘)
 48 # print(‘qqqq‘,end=‘‘,file=f)
 49 # f.close()
 50 # **************************************************
 51 # complex
 52 # a = 2 + 3j
 53 # print(type(a))
 54 # **************************************************
 55 # import time
 56 # for i in range(0,101,2):
 57 #     time.sleep(0.1)
 58 #     char_num = i//2
 59 #     per_str = ‘\r%s%% : %s\n‘ % (i,‘*‘*char_num) if i == 100 else ‘\r%s%% : %s‘ % (i,‘*‘*char_num)
 60 #     print(per_str,end=‘‘,flush=True)
 61 #     # print(per_str, end=‘‘)
 62 # **************************************************
 63 # eval 和 exec执行字符串类型的代码
 64 # exec(‘print(123)‘)
 65 # eval(‘print(123)‘)
 66 # print(eval(‘1+2+3+4‘))
 67 # print(exec(‘1+2+3+4‘))  # None
 68 # exec 和eval都可以执行字符串类型的代码
 69 # eval有返回值 -- 有结果的简单计算
 70 # exec没有返回值 -- 简单流程控制
 71 # eval只能用在你明确知道你要执行的代码是什么
 72 
 73 # code = ‘‘‘for i in range(10):
 74 #     print(i*‘*‘)‘‘‘
 75 # exec(code)
 76 # # eval(code)    # SyntaxError: invalid syntax
 77 
 78 # code1 = ‘for i in range(0,10):print(i)‘
 79 # compile1 = compile(code1,‘‘,‘exec‘)
 80 # exec(compile1)
 81 # eval(compile1)  # 可以正确执行
 82 
 83 # code2 = ‘1+2+3+4‘
 84 # compile2 = compile(code2,‘‘,‘eval‘)
 85 # print(eval(compile2))
 86 
 87 # code3 = "name = input(‘please input your name:‘)"
 88 # compile3 = compile(code3,‘‘,‘single‘)
 89 # exec(compile3)
 90 # print(name)
 91 # **************************************************
 92 
 93 # float
 94 # f = 0.2134548798764845465
 95 # print(f)
 96 
 97 # # 二进制、八进制、十六进制
 98 # print(bin(10))  # 0b1010
 99 # print(oct(10))  # 0o12
100 # print(hex(10))  # 0xa
101 
102 # abs 求绝对值
103 # print(abs(-5))
104 
105 
106 # print(divmod(7,2))  # (3, 1)
107 # print(divmod(9,5))  # (1, 4)
108 
109 # round
110 # print(round(0.23456789,4))  # 0.2346
111 # pow
112 # print(pow(2,3)) # 8
113 # # x**y%z
114 # print(pow(2,5,3))   # 2
115 
116 # sum
117 # ret = sum([1,2,3,5])
118 # print(ret)
119 # # ret = sum(1,2,3,4)
120 # # print(ret)
121 # ret = sum([1,2,3,4],15)
122 # print(ret)
123 
124 # min
125 # print(min([1,2,3,-4]))
126 # print(min(1,2,3,4,-5))
127 # print(min(1,2,3,-4,key=abs))

 

内置函数二

 1 # sorted
 2 # l1 = [1,2,3,5,-2,-4,-6]
 3 # l2 = sorted(l1,key=abs)
 4 # l3 = sorted(l1)
 5 
 6 # print(l1)
 7 # print(l2)
 8 # print(l3)
 9 # l = [[1,2],[3,4,5,6],(7,),‘123‘]
10 # l.sort(key=len,reverse=True)
11 # print(l)
12 #
13 # print(sorted(l,key=len))
14 
15 # filter
16 # def is_odd(x):
17 #     return x%2 ==1
18 # # print(is_odd(1))
19 # a = filter(is_odd,[1,2,3,4,6,7,34,63,23])
20 # for i in a:
21 #     print(i)
22 
23 # def is_not_empty(s):
24 #     return s and len(s.strip()) >0
25 # a = filter(is_not_empty,[‘test‘, None, ‘‘, ‘str‘, ‘  ‘, ‘END‘])
26 # print(list(a))
27 
28 # def is_sqr(x):
29 #     return pow(x,0.5) % 1 == 0
30 # flt = filter(is_sqr,range(1,101))
31 # print(list(flt))
32 
33 # L =  [1,2,3,4,5,6,7,8]
34 # def pow2(x):
35 #     return x*x
36 # a = map(pow2,L)
37 # print(list(a))
38 
39 
40 
41 # l= [1,2,3,4,5]
42 # l.reverse()# 将l反序
43 # print(l)
44 
45 # l2 = reversed(l)  # 返回一个能反序的迭代器
46 # print(list(l2))
47 
48 # zip
49 # l = [1,2,3,4]
50 # l2 = [‘a‘,‘b‘,‘c‘]
51 # for i in zip(l,l2):
52 #     print(i)
53 
54 # format
55 # print(format(3.1415936))
56 # print(str(3.1415936))
57 
58 # 字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐
59 # print(format(‘test‘,‘<20‘))
60 # print(format(‘test‘,‘>20‘))
61 # print(format(‘test‘,‘^20‘))
62 
63 # 整形数值可以提供的参数有 ‘b‘ ‘c‘ ‘d‘ ‘o‘ ‘x‘ ‘X‘ ‘n‘ None
64 # print(format(3,‘b‘))    # 转换成二进制
65 # print(format(97,‘c‘))   # 转换成uinicode字符
66 # print(format(11,‘d‘))   # 转换成十进制
67 # print(format(11,‘o‘))   # 转换成八进制
68 # print(format(11,‘x‘))   # 转换成16进制,字母用小写表示
69 # print(format(11,‘X‘))   # 转换成16进制,字母用大写表示
70 # print(format(11,‘n‘))   # 和d一样
71 # print(format(11))        # 默认和d一样
72 
73 # #浮点数可以提供的参数有 ‘e‘ ‘E‘ ‘f‘ ‘F‘ ‘g‘ ‘G‘ ‘n‘ ‘%‘ None
74 # print(format(314149267,‘e‘)) #科学计数法,默认保留6位小数
75 # print(format(314149267,‘0.8e‘)) #科学计数法,指定保留8位小数
76 # print(format(314159267,‘0.2E‘)) # 科学计数法,指定保留2位小数,采用大写E表示
77 # print(format(314159267,‘f‘))    # 小数点表示法,默认保留6位小数
78 # print(format(3.14159267000,‘f‘))    # 小数点表示法,默认保留6位小数
79 # print(format(3.14159267000,‘0.8f‘))    # 小数点表示法,指定保留8位小数
80 # print(format(3.14159267000,‘0.10f‘))    # 小数点表示法,指定保留10位小数
81 # print(format(3.14e+10000,‘F‘))  # 小数点表示法,无穷大换成大写字母
82 
83 #g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,
84 # 如果-4<= exp <p,则采用小数计数法,并保留p-1-exp位小数,否则按小数计数法计数,并按p-1保留小数位数
85 # print(format(314156.9267,‘0.3g‘))   # 3.14e+05
86 # print(format(3.141569267,‘0.3g‘))

 

以上是关于Python内置函数range的主要内容,如果未能解决你的问题,请参考以下文章

python中的关键字---3(内置函数)

python-内置函数

Python入门:内置函数

好好学python · 内置函数(range(),zip(),sorted(),map(),reduce(),filter())

python的内置函数

python3 之 内置函数range()