毕业10年了,做测试也8年了,期间学习了各种开发语言、工具:java、vb、loadrunner、jmeter、robotframework等,最终都是不成体系。笔记也是摘抄自网络,日久不用自然而然的就废掉了。今年老同事聚会,聊的最多的就是中年危机;一起出道的小伙伴,大部分都已经改行或走的更远了,感觉自己还是再原地踏步,今年再不努力,明年可能就找不到工作了。今年的目标时:熟练应用python(基础)、robotframwork(interface、h5、app)加油,2018!。先从python基础入手,接下来的笔记就是来源于网络老师的课程。

本节内容:

  1. Python介绍
  2. 发展史
  3. Python 2 or 3?
  4. 安装
  5. Hello World程序
  6. 变量
  7. 用户输入
  8. 模块初识
  9. .pyc是个什么鬼?
  10. 数据类型初识
  11. 数据运算
  12. 表达式if ...else语句
  13. 表达式for 循环
  14. break and continue 
  15. 表达式while 循环
  16. 作业需求

一、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程序

python绘制带角度的矩形框_python

python绘制带角度的矩形框_python_02

#! /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  判断两个变量是否引用自同一对象;

  位运算:

    &:按位与运算符

    |:按位或运算符

    ^:按位异或运算符

    ~:按位取反运算符

    <<:左移运算符

    >>:右移运算符

  运算符优先级:

  

python绘制带角度的矩形框_python绘制带角度的矩形框_03

#三元运算符
a = 1
b = 3
c = b if a >b else a    
print (c)

 

二进制与十六进制转换:

python绘制带角度的矩形框_数据类型_04

 

十三、表达式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类型表示

    

python绘制带角度的矩形框_python绘制带角度的矩形框_05

 

msg = '我爱天安门'
print (msg)
print (msg.encode('utf-8'))   #encode中需要写入msg之前的编码格式;windows中默认使用的utf-8编码,所以,这里的utf-8可以不用谢
print (msg.encode('utf-8').decode())  #decode这里也是默认utf-8,所以可以不用写