2021.9.1
今日讲解了Python的print和input用法,以及如何使用文档。
今日重点是地址问题,对于python和c的地址引用问题
- 接下来讲解文档帮助·:有两种方式
print?或help(print)
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
# 函数的参数问题,value,...表示可变参数,sep表示间隔是空格,end表示默认换行,file默认是直接输出到屏幕上,也可以修改保存到文件上,flush默认是false,是关闭才加载到内存当中,如果为true,表示立即刷新,而不是等待缓存区满了才刷新。
Prints the values to a stream, or to sys.stdout by default. #表示可以输入多个参数到一个流中。
Optional keyword arguments:#可选参数
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
Type: builtin_function_or_method #表示这是python官方内置函数
- 查找类型
每个数值或变量都有它自己的类型
a = 123
b = 12.3
c = "123"
d = [1,2,3]
e = {1,2,3,4}
f = {"key1":"123","key2":"12"}
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
print(type(f))
输出结果:
<class 'int'> #表示整型
<class 'float'> #表示浮点
<class 'str'> #表示字符串
<class 'list'> #表示列表(类似java的数组,但python中并没有数组这个概念)
<class 'set'> #表示集合
<class 'dict'> #表示字典
注意:对于列表‘集合和字典来说,他们可以保存不一样的类型,这点跟java不一样,如:
d = [1,"123",{1,2,3}]#并不会报错,对于java来说则不行
- 输出格式
print("第一个参数:%d,第二个参数是:%s" %(10,"小白")) #大致上是这样
%d和%s大致上跟c中的占位符类似
- 参数的使用
- sep
print(1,2,3,4) #默认间隔为空格
print(1,2,3,4,sep = '*') #修改为*
输出结果
1 2 3 4
1*2*3*4
- end
print(1,2,3) # 默认为换行
print(1,2,3,end='结尾') #修改换行为字符串
print(4,5,6)
输出结果:
1 2 3
1 2 3结尾4 5 6
对于输出大致上就这么多(下课后就记得这么多了。。。)
**难点:**对于每一个变量的赋值,都要注意:python每一次都是将变量的定义和赋值是一起操作的,也就是说,你两次同一个变量的赋值,其实地址已经发生改变了。
a = 12
print(id(a))
a = 13
print(id(a))
输出结果:
94612661048288
94612661048320
#两个地址不一样,这跟c就不一样了(java待验证),这其实是python机制造成的,每一次赋值都是重新定义了,在赋值完12后,地址数值已经保存在那了,然后重新找个地址赋值过去。
对于单字节来说,每次同样的赋值,结果一样。
a = 0
print(id(a))
a = 0
print(id(a))
输出结果:
94435260273248
94435260273248
有意思的是,256的地址还是相等的,按照单字节来说,应当是0~255(可能是机制问题)
a = 256
print(id(a))
a = 256
print(id(a))
输出结果(地址依旧相同)
94435260281440
94435260281440
到了257地址就不一样了。
a = 257
print(id(a))
a = 257
print(id(a))
输出结果
140453486287504
140453486286448
对于负数来说就更神奇了。它相等的范围只有(-1,-5)。至于为什么,还不清楚
a = -1
print(id(a))
a = -1
print(id(a))
输出结果:
94435260273216
94435260273216
a = -5
print(id(a))
a = -5
print(id(a))
输出结果:
94435260273088
94435260273088
a = -6
print(id(a))
a = -6
print(id(a))
输出结果:
140453486288112
140453486288144
对于浮点数稍微测试了一下,发现对于不论什么浮点数,地址不一样,哪怕是1.0这些
综合测试:对于-5到256的赋值(注意一定要是整数),地址是一样的,不会改变,至于其他的,则会重新开辟一个空间,然后赋值。
Input输入
知识点并不多,主要知道在使用input后,要记得转换类型
首先看下文档
input?
输出·结果:
Signature: input(prompt='')
Docstring:Forward raw_input to frontendsRaises
------StdinNotImplentedError if active frontend doesn't support stdin. #讲解报错问题
File:/srv/conda/envs/notebook/lib/python3.7/site-packages/ipykernel/kernelbase.
pyType: method
文档提供参数很少,说明没说明太大限制。
a = input("输入的结果是:")
输出结果:
输入的结果是: 123
注意:
若使用以下,就会报错,因为没有类型转换
a = input()
c = a + 120
输出结果:
10 #这个是你输入的结果
---------------------------------------------------------------------------TypeError Traceback (most recent call last) #报错说类型不一致,
<ipython-input-26-3a077301b032> in <module>
1 a = input()
----> 2 c = a + 120
TypeError: can only concatenate str (not "int") to str
因为在输入的时候,python是自动设置为字符串类型,因此我们要转换,还有python里面是没有char类型
a = int(input())
c = a + 120
print(c)
输出结果:
10 #这个是我输入的值
130 #输出结果