python的一些学习总结

时间:2023-01-30 09:09:28

 

前段时间在做esim项目的时候接触到了python写的scons编译脚本,然后大概看了下这门语言,应该不叫语言,叫脚本,他和c语言很像,下面把自己的一些总结梳理下:

0.每门语言都需要调试,那么调试时使用最多的就是输出了,那python中都如何输出呢?

  a)  print a

  b) print("Hello World")

 c) print("The length of %s is %d" % (s,x))


1.学一门语言时总得知道其数据结构吧,这是最基本的,上次被问到了,答不出来,感觉自己学东西的方式不对

python语言基本的数据类型有:数字Number、字符串String、列表List、元组Tuple、字典Dictionary

他们各有特点,列表用 [] , 元组用 () ,字典用{keys:values},其中元组是只读,不可以对他进行修改、删除一部分的操作。

字符串可以用单引号或者双引号表示,那为什么要有两种呢------因为如果用单引号表示的话,里面要再表示单引号,那就要通过转义字符来做,

如表示   let's go   用单引号就需要  ‘let\'s go’  表示,所以用双引号就简单了,“let's go”就可以了。


2.大家都知道在大多数语言里都有if  else语句,对,在python也有,不奇怪,但是呢,在python里面  for和while也有else噢,是不是感觉好特别呀,刚开始我也很好奇

用法如下   

while 语句

python的一些学习总结

for 语句

python的一些学习总结


3.在python还有个语句  pass,那pass有什么作用呢

pass相当于一个空语句啥都不做,那是不是感觉没啥用,那你就错了,每个事物存在都有他的合理性,那就是如果当你在写一个函数时没想好要怎么写函数体,为了语句函数的完整性,那是不是加上这句就可以了,在if条件中也一样。


插一个小话题:在看python时间相关内容时,突然想为什么几乎所有的语言都把1970年1月1号0时作为时间的起点

----个人理解是由于当时计算机系统是32位,那表示的时间通过换算也只能表示68年左右,而很多软件和时间是有关系的,68年到了这些个软件就没用了,所以那些大哥哥们就躲在一起开了个会说,咱就把1970年定为时间的最小值,至少也可以熬到2038年,过了2038年出问题,反正我们也不在了,怕啥(开玩笑),这和南海的搁置争议,以后有能力了再说,那现在时间是不是到了。哈哈哈

a、最懒的解释

很多编程语言起源于UNIX系统,而UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。

说了这个懒人的解释,估计大家还没有懂得真正的意思。所以我们接下来深入的了解一下。

b、深入的了解

最初计算机操作系统是32位,而时间也是用32位表示。

System.out.println(Integer.MAX_VALUE);

2147483647

Integer 在JAVA内用32位表示,因此32位能表示的最大值是2147483647。另外1年365天的总秒数是 31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,从1970年开始的话,加上68.1,实际最终到2038年01月19日03时14分07秒,便会到 达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,算下来也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。

到 这里,我想问题的答案已经显现出来了,那就是:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的 时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到 292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后 了。


3.在python语句中到底要不要分号?到底缩进要多少个空格?

a.在C、Java等语言的语法中规定,必须以分号作为语句结束的标识。


Python也支持分号,同样用于一条语句的结束标识。但在Python中分号的作用已经不像C、Java中那么重要了,Python中的分号可以省略,主要通过换行来识别语句的结束。
b.缩进的空格数没有规定要几个,有就可以,但是后面与其同级的语句缩进一定要一样
 
4.对于python中关于变量及指针不一样的理解
 

下面其实有点像C中的传值调用和指针调用:

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象----这个有点指针的含义,函数可以改变他的值

  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。python的一些学习总结

python的一些学习总结

5.那既然都是面向对象的语言,肯定有class,那么在C++中class声明内部成员属性为私有是通过private,那么python中是用什么呢?
其实python这种语言,你想想他连变量都不用char、int等变量类型来定义,那么这里声明一个成员为私有,就 更不会勇哥东西来形容,他直接在名称上做文章:两个下划线开头,声明该属性为私有
class JustCounter:    __secretCount = 0  # 私有变量    publicCount = 0    # 公开变量     def count(self):        self.__secretCount += 1        self.publicCount += 1        print self.__secretCount

单下划线、双下划线、头尾双下划线说明:

  • __foo__: 定义的是特列方法,类似 __init__() 之类的。

  • _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

  • __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

6.对于C语言中,变量都有一定的作用范围,C语言中变量超粗他的作用范围,系统会自动释放他,那python中这块是怎么做呢?
对于一种语言来说,自动释放肯定是有的,其实和C语言一样,超出作用范围系统也会自动释放,就像class中,在用完类的实例时,会自动调用类中的__del__函数来释放该实例所占用的内存。