毕业10年了,做测试也8年了,期间学习了各种开发语言、工具:java、vb、loadrunner、jmeter、robotframework等,最终都是不成体系。笔记也是摘抄自网络,日久不用自然而然的就废掉了。今年老同事聚会,聊的最多的就是中年危机;一起出道的小伙伴,大部分都已经改行或走的更远了,感觉自己还是再原地踏步,今年再不努力,明年可能就找不到工作了。今年的目标时:熟练应用python(基础)、robotframwork(interface、h5、app)加油,2018!。先从python基础入手,接下来的笔记就是来源于网络老师的课程。
本节内容:
- Python介绍
- 发展史
- Python 2 or 3?
- 安装
- Hello World程序
- 变量
- 用户输入
- 模块初识
- .pyc是个什么鬼?
- 数据类型初识
- 数据运算
- 表达式if ...else语句
- 表达式for 循环
- break and continue
- 表达式while 循环
- 作业需求
一、python介绍:
python的创始人为吉多·范罗苏姆(Guido van Rossum)。最新的TIOBE排行榜,Python赶超PHP占据第五, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。
目前主要应用领域:科学计算、人工智能、web开发、云计算、金融
在一些公司的应用:知乎、youtube、facabook的大量基础库
python时一门什么样的语言:
主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言
编译器:把源程序的每一条语句都编译成计算机语言,并保存为二进制文件。这样运行时,计算机可以直接以机器语言来运行该程序,速度很快。
解释器:只有在执行程序时,才一条一条的解释成机器语言给计算机运行,所以速度慢---python就是该是解释器
动态语言:在用动态类型的语言编程时,永远不会给任何变量指定类型,该语言会在第一次给变量赋值时,在内部将数据类型记录下来------python、ruby为代表
静态语言:在编辑期间会检查会检查数据类型,也就是说写程序时,要声明变量的数据类型---java、c++为代表
强类型定义语言:一旦一个变量被指定了数据类型,如不哦不强制转换,那么它永远是这个数据类型---python为代表
弱类型定义语言:一个变量可以赋不同类型的值
python优点:
扩展性强、高级语言、移植性强、简洁、可嵌入
四、安装:
windows:百度即可下载最新的安装包、注意pthon3才是未来,python2 在2020就会停止更新
linux/mac:自带python,注意升级
五、Hello world程序
#! /usr/bin/env python
pirnt ('Hello world!')
View Code
linux中可以直接通过命令python hello.py来指定解释器,如果直接./hello.py就需要加上第一行代码来制定默认python解释器。记得windows会从环境变量中去找解释器来执行。
六、变量和字符编码
变量命名规则与其它语言基本一致:
①、变量由字母、数字、下划线组成;
②、不能以数字开头;
③、系统已使用关键字不能当变量名,如: ['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']
④、虽然中文变量可以生效,但是别使用中文变量
字符编码:
ASCII:只占一个字节(8字节)存储空间,所能存储为2**8,共可标识255个数据。所有大小写字母、特殊字符,总计127个,还有剩余139个空间。
GBK:在139个空间中,建立了索引,指向了GBK编码,最初只有7000个,后来不断扩充,直到3W个。该编码所占空间2位。
Unicode:因为各国在征用139个空间,导致各国都建立自己的编码各式,在混合使用中,容易出现乱码;所有出现了unicode-万国码。该编码至少占2个字节。
UTF-8:实在unicode的基础上进行了优化,ASCII中的内容占一位,欧洲的字符占2个字节,东亚的字符用3个字节保存。
name = "Alwin chen"
name2 = name
print ("My name is:",name,name)
name = "PaoChe Ge"
print ("Name2 is:",name2,"!.And Name is:",name)
'''
name2首先指向name值的内存地址,然后name指向的地址变更了,但是name2并不变更,所以值不变
'''
中文='我是中文变量' #不要这样写变量
print (中文)
gf_of_oldboy = "我是标准变量"
print ("打印标准变量,请注意:",gf_of_oldboy)
PIE="3.14" #常量定义
print ("打印常量:",PIE)
#二级制讲解 2的N次方=2的(N-1次方)+2的(N-2次方)+...2的0次方+1 狼烟例子
n2 = 2**8
print ("次方表示:",n2)
七、用户输入
#!/usr/bin/env python
name=input("Input your name:")
print ("Your name is {0}".formate(name))
python2.X中输入时通过Raw_input,getpass在pycharm中运行会出现长期等待,在cmd的python环境中运行正常;python3.X中input就等于Raw_input
name = input("Input your name:")
age = int(input("Input your age:")) #因为python是强类型,所有输入默认为str,如果不转换为int,输出中使用%d,就会报错
print (type(age))
password = getpass.getpass("Input your password:" ) #pycharm中不好使用getpass,需要在CMD PYTHON或IDE中执行
job = input("Input your job:")
salary = input("Input your salary:")
info_1="""
-------------------info1 of %s--------------------
name:%s
age:%d
job:%s
salary:%s
""" % (name,name,age,job,salary) #注意这里是% ,不是格式化format;该组变量必须与引号中一一对应
info_2="""
#此种打印方式最常用,注意必须使用三引号,才能用该模式
-------------------info2 of {_name}--------------------
name:{_name}
age:{_age}
job:{_job}
salary:{_salary}
""".format(_name=name,_age=age,_job=job,_salary=salary) # python中变量都需要用花括号;
info_3="""
#此方式0123必须和变量名意义对应,顺序不能错
-------------------info3 of {0}--------------------
name:{0}
age:{1}
job:{2}
salary:{3}
""".format(name,age,job,salary)
print (info_1,info_2,info_3)
八、模块初始
python由非常强大的标准库和第三方库。引入任何库,会优先从代码所在目录寻找,然后再从环境变量中寻找。例如:
#!/usr/bin/env python
import sys
print (sys.argv)
#python test.py hello world
['test.py','hello','world'] #把脚本传递的参数获取到了
#!/usr/bin/env python
import os
os.system('df -h') #调用系统命令
结合上面
1 #!/usr/bin/env python
2
3 import os,sys
4
5 os.system(''.join(sys.argv[1:]))
6
7 #把用户输入的参数当作一条命令交给os.system来执行
import os
# 09 模块
print (sys.path) #环境变量中得路径,如果引用模块,会从当前目录寻找,没有再从环境变量site_package中寻找,在没有就报错
print (sys.argv)
dir = os.system('dir') #windows中打印当前目录;linux中是'll'
print ('---->',dir) #结果为0,是因上一行只执行命令,并返回命令是否成功;0--成功
dir = os.popen('dir').read() #不加read打印的就是对象的内存地址
print ('========>',dir) #
os.mkdir('newdir') #在当前路径创建目录
也可以自己写模块,然后调用
十、pyc是什么鬼
PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
当第三次运行时,会对比pyc的更新时间和py的更新时间对比,如果py更新,那就重新编译一次。
十一、数据类型初识
1、数字
分为int(整型)、long(长整形)、float(浮点型)。
①、int:
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
python3中只有int型了,没有long型。
②、long:
当int长度过长时,自动转换为long。
③、float:
浮点数时用来处理带小数的实数,类似C语言中double,占8个字节(64位),其中52位表示底,11位表示长度,一位表示正负。
④、complex(复数):
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
2、bool(布尔值):
真或假,即1或0
3、string:
‘hello world’
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
PS:字符串是%s,整数是%d,浮点数是%f
字符串常用功能:strip、length、split、index、分割、切片
4、list:
name_list=['one','two','three','four'] 或
name_list=list(['one','two','three','four'])
常用方法有:append、index,insert、split,del,inrange、切片、分割、循环
5、tuple:不可变列表--顺序不可变、值可变
age=(11,12,13) 或
age=((11,12,13))
6、dict:无序
info={'name':'Alwin','age':12} 或
info=dict({'name':'Alwin','age':12})
常用操作:key、value、key-value、del、index、新增、循环、长度
十二、数据运算
算数运算:+、-、*、/(5/2得2)、**(幂)、%(取模--返回余数)、//(取整)
比较运算符(true/false):>,<,>=,<=,<>,!=,==
赋值运算:=,+=,-=,*=,/=,**=,//=,%=
逻辑运算符(true/false):and,or,not
成员运算(true/false):in,not in
身份运算:is,is not 判断两个变量是否引用自同一对象;
位运算:
&:按位与运算符
|:按位或运算符
^:按位异或运算符
~:按位取反运算符
<<:左移运算符
>>:右移运算符
运算符优先级:
#三元运算符
a = 1
b = 3
c = b if a >b else a
print (c)
二进制与十六进制转换:
十三、表达式if...else
# 03 if else判断与缩进
_name="Alwin"
_password="123456ab"
name = input("Input your name:")
password = input("Input your password:")
if _name==name and _password==password:
print ("Welcome user {0} to login".format(name))
else:
print("Invalid username or password")
print ("if is over")
###################################################
# 04 if elif 判断
wife_age = 18
input_age = int(input("input your wife age:"))
if input_age>wife_age:
print("think small")
elif input_age == wife_age:
print("""Great!Your wife age is:{a}""".format(a=wife_age))
else:
print("think bigger")
十四、while循环
# 当循环3次后,如果用户还想继续循环则可以这样写
wife_age = 18
count = 0
while count < 3:
input_age = int(input("input your wife age:"))
if input_age > wife_age:
print("think small")
elif input_age == wife_age:
print("""Great!Your wife age is:{a}""".format(a=wife_age))
break
else:
print("think bigger")
count+=1
if count == 3: #最后一次循环时,count已经等于3了;有了这段代码,就没有必要使用下方的else
confirm_continue = input("Do you want to continue?...Input 'y' is mean to continue...")
if confirm_continue == 'y':
count = 0
#else: #当while模块不成立时,就执行该模块;平时也可以不要该模块
# print("you have tried too many times..fuck off!")
十五、for循环,break,continue
###################################################
# 06 For循环
for i in range(5): #默认打印0到4
print (i)
for j in range(0,5,2): #设置了步长
print(j)
wife_age = 18
for i in range(3):
input_age = int(input("input your wife age:"))
if input_age > wife_age:
print("think small")
elif input_age == wife_age:
print("""Great!Your wife age is:{a}""".format(a=wife_age))
break
else:
print("think bigger")
else: #和while一样,for循环正常执行完成后,就会执行else;如果循环中遇到break,就不会执行else
print("you have tried too many times..fuck off!")
十六、嵌套循环
# 08 嵌套循环
for i in range(10):
print ("----------------------current i is:{0}".format(i))
for j in range(10):
print (j)
if j > 5:
break #结束当前循环,也就是嵌套内的for循环
入门拾遗:
python3最重要的新特性大概要算对文本和二进制数据做了更为清晰的区分。文本总是unicode。有str类型表示,二进制数据(音频、视频)由bytes类型表示
msg = '我爱天安门'
print (msg)
print (msg.encode('utf-8')) #encode中需要写入msg之前的编码格式;windows中默认使用的utf-8编码,所以,这里的utf-8可以不用谢
print (msg.encode('utf-8').decode()) #decode这里也是默认utf-8,所以可以不用写