day1 基础
Posted 一无是处谢
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day1 基础相关的知识,希望对你有一定的参考价值。
1.python 简介
一、python简介
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
最新的TIOBE排行榜,python排在第五。
由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。
注视:上述重点字体表示该公司主要使用Python语言开发
编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。
编译和解释的区别是什么?
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
编译型vs解释型
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
二、hello world
#!/usr/bin/env python
print
"hello,world"
#_*_coding:utf-8_*_
name
=
"Alex Li"
变量定义的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
[\'and\', \'as\', \'assert\', \'break\', \'class\', \'continue\', \'def\', \'del\', \'elif\', \'else\', \'except\', \'exec\', \'finally\', \'for\', \'from\', \'global\', \'if\', \'import\', \'in\', \'is\', \'lambda\', \'not\', \'or\', \'pass\', \'print\', \'raise\', \'return\', \'try\', \'while\', \'with\', \'yield\']
四、字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print
"你好,世界"
注释
当行注视:# 被注释内容
多行注释:""" 被注释内容 """
五、用户输入
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #name = raw_input("What is your name?") #only on python 2.x 4 name = input("What is your name?") 5 print("Hello " + name )
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import getpass 4 # 将用户输入的密码赋值给 pwd 变量 5 pwd = getpass.getpass("请输入密码:") 6 print(pwd)# 打印输入的内容
sys
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import sys 4 print(sys.argv) 5 #输出 6 $ python test.py helo world 7 [\'test.py\', \'helo\', \'world\'] #把执行脚本时传递的参数获取到了
os
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import os 4 os.system("df -h") #调用系统命令
七、pyc
1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊! 为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。 2. 解释型语言和编译型语言 计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。 编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。 解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。 通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。 此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。 用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。 3. Python到底是什么 其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。 当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。 熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序: javac hello.java java hello 只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。 4. 简述Python的运行过程 在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。 我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。 当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。 当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。 所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
八、数据类型
1、数字
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
name = "flex" print "i am %s " % name #输出: i am alex
PS: 字符串是 %s;整数 %d;浮点数%f
移除空白 ; 分割 ; 长度 ; 索引 ; 切片
创建列表:
1 name = [\'flex\', \'calvin\', \'snik\'] 2 或 3 name = list([\'flex\', \'calvin\', \'snik\'])
基本操作:
索引 ; 切片 ; 追加 ; 删除 ; 长度 ; 切片 ; 循环 ; 包含
test = [\'t\',\'s\',\'n\',\'a\'] test2 = [\'li\',\'zhang\',[\'xie\',\'wang\',\'huang\']]
test.index[]
test[:] 切片取头不取尾,0到-1,test[0:7:2] 2指步长
test.append(\'abc\') 给test列表在最后追加一个元素 abc
test.insert(0,\'mm\') 前面指定位置,后面写插入的元素值
test[2]=\'bb\' 修改指定下标元素值
test.pop()删除最后一个元素 test.remove(\'Y\') 删除左边第一个Y元素
del test[2] 指定删除下标为2的元素
循环
for i in test:
print (i)
test.sort() 排序,根据ascii码排序 test.reverse() 倒序 test + test2 拼接序列 test.extend(test2)
以下方法需要学会:
append:追加到一个列表
count:次数
extend:添加
index:索引值,即下标
insert:插入
pop:弹出
remove:删除
reverse:翻转
sort:排序
5、元组(不可变列表)
创建元组
1 time = (11, 22, 33, 44, 55) 2 或 3 time = tuple((11, 22, 33, 44, 55))
count:次数
index:索引值,下标
6、字典
创建字典
1 information = {"name": "stifan", \'age\': 28} 2 或 3 information = dict({"name": "stifan", \'age\': 28})
常用操作:
索引 新增 删除 键、值、键值对 循环 长度
clear:清除内容 copy:浅拷贝 fromkeys:生成字典 has_key:是否有key get:根据key获取值 items:所有项的列表形式 iteritems:项可迭代 keys:所有的key列表 iterkeys:key可迭代 itervalues:value可迭代 pop:获取并在字典中移除 popitem:获取并在字典中移除(从头开始删除) del:删除元素 setdefault (不存在则创建,存在则不创建) update:更新 values:所有项,只是将内容保存至view对象中 cmp:比较
7、set集合
set是一个无序且不重复的元素集合
add:添加 clear:清除 copy:浅copy difference: difference_update:删除当前set中的所有包含在 new set 里的元素 discard:移除元素 intersection:取交集,新创建一个set intersection_update:取交集,修改原来set " isdisjoint:如果没有交集,返回true issubset:是否是子集 issuperset:是否是父集 pop:移除 remove:移除 symmetric_difference:差集,创建新对象 symmetric_difference_update:差集,改变原来 union:并集 update:更新 and cmp
补充
collection系列:
1)计数器:Counter
Counter是对字典类型的补充,用于追踪值的出现次数
具备字典的所有功能 + 自己的功能
c = Counter(\'abcdeabcdabcaba\')
print c
输出:Counter({\'a\': 5, \'b\': 4, \'c\': 3, \'d\': 2, \'e\': 1})
2)有序字典
orderdDict是对字典类型的补充,他记住了字典元素添加的顺序
3默认字典
defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {\'k1\': 大于66 , \'k2\': 小于66}
九,数据运算
1、算数运算
2、比较运算
3、赋值运算:
4、逻辑运算:
5、成员运算:
6、身份运算:
7、位运算:
a
=
60
# 60 = 0011 1100
b
=
13
# 13 = 0000 1101
运算符优先级:
1 #!/usr/bin/python 2 3 a = 60 # 60 = 0011 1100 4 b = 13 # 13 = 0000 1101 5 c = 0 6 7 c = a & b; # 12 = 0000 1100 8 print "Line 1 - Value of c is ", c 9 10 c = a | b; # 61 = 0011 1101 11 print "Line 2 - Value of c is ", c 12 13 c = a ^ b; # 49 = 0011 0001 #相同为0,不同为1 14 print "Line 3 - Value of c is ", c 15 16 c = ~a; # -61 = 1100 0011 17 print "Line 4 - Value of c is ", c 18 19 c = a << 2; # 240 = 1111 0000 20 print "Line 5 - Value of c is ", c 21 22 c = a >> 2; # 15 = 0000 1111 23 print "Line 6 - Value of c is ", c
十,表达式 if ... else
1 #!/usr/bin/env python 2 # -*- coding: encoding -*- 3 import getpass 4 5 name = raw_input(\'请输入用户名:\') 6 pwd = getpass.getpass(\'请输入密码:\') 7 8 if name == "tom" and pwd == "123": 9 print("欢迎,tom!") 10 else: 11 print("用户名和密码错误")
十一,表达式 for loop
1 #_*_coding:utf-8_*_ 2 3 for i in range(10): 4 print("loop:", i )
1 for i in range(10): 2 if i<5: 3 continue #不往下走了,直接进入下一次loop 4 print("loop:", i )
1 for i in range(10): 2 if i>5: 3 break #不往下走了,直接跳出整个loop 4 print("loop:", i )
十二,while loop
1 count = 0 2 while True: 3 print("你是风儿我是沙,缠缠绵绵到天涯...",count) 4 count +=1
猜年龄三次机会版
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 my_age = 28 4 5 count = 0 6 while count < 3: 7 user_input = int(input("input your guess num:")) 8 9 if user_input == my_age: 10 print("Congratulations, you got it !") 11 break 12 elif user_input < my_age: 13 print("Oops,think bigger!") 14 else: 15 print("think smaller!") 16 count += 1 #每次loop 计数器+1 17 else: 18 print("猜这么多次都不对,你个笨蛋.")
以上是关于day1 基础的主要内容,如果未能解决你的问题,请参考以下文章