python3基础

python3(与python2语法不一样)

计算机常识

 软件:是一系列计算机指令,可以按照设计的逻辑完成某些业务。

 软件三要数:程序、数据、文档

 软件开发:就是显示按照功能逻辑实现代码的过程,需求分析、概要设计、详细设计、单元测试

 常见的开发模型:瀑布模型、螺旋模型、敏捷模型

 常见测试模型:v、w、h

 常用dos指令

   切换目录指令:

         切换不同盘符:E;

         同一盘符切换不同目录:cd e:\data

         

   创建文件夹目录:

         md:md aaa-在当前路径下创建一个aaa文件夹

         mkdir: mkdir bbb

         同时创建级联目录:md aaa\bbb or mkdir aaa\bbb

   

   查看当前目录下所有文件: dir

   删除文件夹目录:rd:rd aaa(rd只能删除空目录)

                       rd /s aaa (/s表级联删除)

                       rd /s /q aaa(/q不询问方式删除)

                   rmdir:rmdir aaa(不能删除非空目录)

                         rmdir /s /q

                   del: del aaa

创建文件:

        重定向:echo aaaaaaaaaa>aaa.txt

删除文件:

        del:del aaa.txt

清屏:cls

退出命令行:exit

python

是一个高层次的结合了解性、编译性、互动性和面向对象的脚本语言。

集成开发环境(IDE):vscode、PyCharm

一、标识符命名规则:

  1. 见名知意,很重要,通过标识符可知道该变量指的是什么。
  2. 必须是字母、数字or下划线组成。
  3. 数字不能开头。
  4. 标识符对大小写是敏感的。
  5. 有保留字。

  • 注释、行与缩进、多行语句:

注释:

单行注释:#

多行注释:’’’xxx’’’ or “””xxx”””

(不能嵌套)

文档注释(文档字符串):类名._doc_

行与缩进:

   python是用缩进代表代码块。

多行语句:python通常是一行写完一条语句,但是如果语句很长,可以用反斜杠(\)来实现多行语句。

      total = item_one+\

            item_two

如果语句中包含{}、[]or()就不需要多行连接符。

三、数据类型

数据类型:(定义变量不需要指定数据类型,直接写标识符的名字就可以了)

         基础数据类型:(python中一切都是类)

1.数字类型:整型,浮点型,复数类型,布尔

整型数字:是精确的,不存在误差,内存长度无限。(python3中不区分long类型)

浮点型数字: 默认只有17有效数字,之后的数据都不精确。如果需要提升精度,需要特殊处理。

提升精度的方法:导包form decimal import*,方法getcontext().prec =30 精度限制到30。

复数:主要用在人工智能,大数据处理等进行数据建模。   aa = 1 + 2j;

布尔:True、False。

  1. 字符串

可以用单引号、双引号,效果一样,但是不能嵌套使用(就近配对原则)

四、转义字符、自然字符串和输出格式

1.转义字符

\,通过特定元字符加上\之后就不是那个字符了,又特定含义。\n--回车换行,\t--一个tab,\\--将后面的转义字符转成普通字符

2.自然字符串

不包括带转义功能的元字符()

用R 或者r表示

r”saddd\nsadfa”输出saddd\nsadfa

空行:用来分割不同的代码段

控制台键盘输入:input()【输入的数据默认字符串】

3.输出常用格式                    

age = input(“请输入你的年龄:”)

print(“我的年龄是:%s”%age)

强制类型转换:age = int(age)【一定要数字类型才能转换】

%s:表示可以接收字符串类型的值

%d: 表示可以接收数字类型的值

%r:表示可以是数字也可以是字符串的值

五、导入模块

import 与from...import

包:文件__init_.py

将整个模块导入:import somemodule

从某个模块中导入某个函数:form somemodule import somefunction

从某个模块中导入多个函数:form somemodule import firstfunc,,,

将某个模块中的全部函数导入:from somemodule import*

可以对导入的模块or函数进行重命名:import somemodule as abc

六、常用设置

#!:叫“shebang”or“sha-bang”

通常再Unix系统脚本中第一行开头写道

 windows可以不指定,但需要配置python的环境变量

help()函数

调用这个函数可以打印输出一个函数的文档字符串

help(max),可以查看max内置函数的参数列表和规范的文档

Quit:退出帮助

#coding=utf-8 或者 #coding:utf8 (不能有空格)

用以指定说明文本格式是utf-8

建议写上

七、标准数据类型

python3中的数据类型,共六种标准数据类型

  1. Number类型

整型,浮点型,复数,布尔。

  1. String类型(序列)

‘’ “”引起来的,不可以嵌套。(不可变、有序、可索引和切片)

     

 find():查找某个元素的索引。

  1. List类型(序列)

元素列表[]在之间,用逗号分隔开。数据类型可以不同!(可变、有序、可索引和切片)

  1. list.index(val):找到列表中某个值在列表中的位置。
  2. list.remove(x):删除列表中第一个x。
  3. del list[N]:删除列表第N个元素。
  4. list.pop[list.index(val)]:删除列表中指定位置的数据返回该数据的值。
  5. list[2:4]=[]:删除列表中第2-4的元素。
  6. list.append(x):把x加入到序列的尾部。
  7. list.insert(list.index,val):在列表指定位置添加数据。
  8. list.extend(list1):把list1的每个元素依次加入到list尾部。
  9. list.count(value):统计某个元素在列表中出现的次数。
  10. list.reverse():列表逆序
  11. list.sort():列表排序

  1. Tuple(元组)类型(序列)

(与列表类似,元素不可以修改不可变、有序、可索引和切片)【可以把字符串看成特殊的元组】

      定义:()定义,用逗号分隔,其中至少有一个逗号  例如:t = (12,)

      虽然元组的元素不可变,但是可以包含可变对象!可以改变里面的数据

       

     set集合类型(无序、不重复)

       定义:{}   例如:set = {}(直接定义{}其实是字典类型)

       可以用工厂类方法set()创建空的set集合

       可以对set集合类型进行集合运算

  1. +:set1 + set2 取并集
  2. -:set1 - set2  取差集
  3. &:set1 & set2 取交集
  4. ^:set1 ^ set2  两个集合中不同时存在的元素

  1. dict字典类型

(类似java中的map,通过键值对的方式存储,无序,是一种映射类型

        定义:{}     dict={key:value,key1:value1}

        键不能重复,不能为集合类型

  1. keys()
  2. values()
  3. items():获取所有键值对
  4. fromkeys(可迭代值):把其他可迭代的类型创建成为dict,键是数字,从1开始。
  5. get():通过键获取值
  6. zip(x,y):把x作为键,y为值创建字典
  7. setdefault(key,value):和get类似,但是如果没有这个键,则会创建,默认值为设置的value
  1. 序列

序列中的数据(元素)是有序排列的,并且可以通过下标访问到1个or多个序列的数据。下标从0开始访问,类似java中数组。

特点:通过下标(索引)获取元素,多个元素可以通过切片获取(切片是python的特殊用法)

序列通用操作符:

  1. in:  x in s  如果x是序列s的元素,返回Ture,否则Flase
  2. not in : x not in s 如果x是序列s的元素,返回Flase,否则Ture
  3. +: s+t 连接两个序列s和t
  4. s*n or n*s:将序列s复制n次
  5. s[i]:索引,返回s中第i个元素
  6. s[i:j] or s[i:j:k]:切片返回序列s中第i到j以k为步长的元素子集。

     序列通用方法:

1.len(s):返回序列s的长度

2.min(s):返回序列s的最小元素,s中元素需要可比较

3.max(x):返回序列s的最大元素,s中元素需要可比较

4.s.index(x) or s.index(x,i,j):返回序列s从i开始到j位置中第一次出现元素x的索引号

5.s.count(x):返回序列s中出现x的总次数

6.s.replace(old,new):替换值

7.s.supper():把字母换成大写

8.s.split():字符分割,指定一个特殊的值为分隔符,就可以依据分隔符分成多个元素

  

       

八、python运算符

  1. 算术运算符:+、-、*、/、%、**(幂函数,a**b,a的b次方)、//(取整除-返回商的整数部分,例如9//2=4)
  2. 比较(关系)运算符:==、!=、>、<、>=、<=
  3. 赋值运算符:=、+=、-=、*=、/=、%=、**=、//=  (例如:a+=b-> a = a+b)
  4. 位运算符:

                  60:00111100

                  13:00001101

&:按位与运算符:参与运算的两个值,两个相应位都为1,则该位的结果为1,否则为0。

0001100 = 12

|:按位或运算符:只要对应的两个二进位有一个为1,则结果位为1。

        00111101= 61

^:按位异或运算符:当两个对应的二进位相异时,结果为1。

        00110001 = 49

~:按位取反运算符:对数据的每个二进制位取反。

        ~60 = 11000011=195

       60: 原码:00111100

            反码:11000011

            补码:反码+1  11000100

       负数原码->反码:符号位不变,其他数据取反

       负数反码->补码:符号位不变,其他数据取反

<<:左移动运算符:运算数的各二进位全部左移若干位,高位丢弃,低位补0。

>>:右移动运算符:运算数的各二进位全部右移若干位,高位丢弃,低位补0。

  1. 逻辑运算符

        x:Flase  y:True

        and: x and y:布尔“与”,全部为Ture返回Ture,否则返回Flase。

        or : x or y :布尔“或”,一个为Ture就返回Ture,全部为Flase才返回Flase

        not: not x :布尔“非”,取反。

  1. 成员运算符

            in:如果在指定的序列中找到值返回Ture,否则返回Flase。

            not in:如果在指定的序列中没有找到值返回Ture,否则返回Flase。

  1. 身份运算符

        is:判断两个标识符是不是引用自同一个对象。

        is not:判断两个标识符是不是引用自不同对象。

  1. 运算符优先级
  1. **
  2. ~
  3. *、/、%、//
  4. +、-
  5. >>、<<
  6. &
  7. ^、|
  8. <=、<、>=、>
  9. <、>、==、!=
  10. =、%=、/=、//、-=、+=、*=、**=
  11. is 、is not
  12. in 、not in
  13. not、or、and

 九、控制语句

1.顺序语句:直接从上到下,依次运行

2.条件语句:if

     格式1:   if 条件语句:

           代码块

            语句1

            语句2

           

   格式2:   if 条件语句:

                  代码块1

              else:

                  代码块2

      格式3:  if 条件语句1:

                   代码块1

               else if 条件语句2:

                   代码块2

 else if 条件语句3:

                   代码块3

                    ....

   

     continue

3.循环语句:   

支持的数据类型:字符串、列表、元组、字典、文件、Range()

1.for循环  

格式:

for  i(条件) in  迭代类型:

代码块

   

定义一个变量i,通过循环从迭代数据类型num顺序地取出一个值给i,循环次数看num的长度

for i in num:

代码块

跟java代码一样就用(for i in range(10) == for(int i =0;i<10;i++))

2.while循环

格式:

While 条件语句:

代码块

有一个变化的量来改变条件表达

else:

代码块

             

  break:跳出循环体

  continue:跳过当前循环块的语句,然后进行下一轮循环

range():生成数列,用于遍历数字序列

   格式:range(start,end,[step])

   返回的是range类型,不是列表,是一种迭代类型。

   

十、函数

将特定功能的一些代码,整合在一个单元中,这个单元就叫方法或函数

函数代码块以def关键词开头,后接函数标识符名称和圆括号。

仍和传入参数和自变量必须放在()内,()中可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串--用于存放函数说明。

函数内容以冒号起始,并且缩进。

return[表达式]结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回None。不写也返回None。

例如: del sum(a,b):

          return a+b

   

      调用:

          sum(2,3)

1.可变对象和不可变对象

在Python中,类型属于对象,变量是没有类型的,所以严格意义上不能说值传递还是引用传递,应该说传不可变对象传可变对象

          

 可更改(mutable)和不可更改(immutable)对象

               不可更改对象:string,tuple和number

               可更改对象:list,dict

         

 不可变类型:变量赋值a=5后再赋值a=10,这里实际上是新生成了一个int

值对象10,再让a指向它,而5被丢弃,相当于新生成了a。   

     可变类型:变量赋值l = [1,2,3,4]后再赋值l[2]=5则是将list l的第三个元素值

更改,本身l没有动,只是其内在部分被修改了。

2.参数传递-类型:

   位置参数:

1.传入的参数个数必须与声明一致,否则Python解释器会报错。

2.传入参数的顺序必须与声明一致。

3.传入参数的类型如果不一致,解释器无法帮我们检查,需要在代码中添加判断语句(错了,但是显示的None)。

    关键字参数:

1.关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

2.使用关键字参数允许函数调用时参数的顺序与声明不一致。

    默认参数:

  1. 调用函数时,如果没有传递参数,则会使用默认参数。
  2. 声明函数时要指定默认值。
  3. 使用默认值可以起到避免漏掉参数导致的错误。

定义: def ab(name,age,sex=),sex=是默认值

            不定长参数:

  1. 需要一个函数能处理比当初声明时更多的参数,这些参数叫不定长参数,声明时不会命名
  2. 加了*号的变量名会存放所有未命名的变量参数。如果确定了指定参数,会放在一个元组。
  3. 在自动化测试里,需要记录脚本运行情况,不同的脚本或者用例,他们输出的日志内容可能不一样,这时候就需要将日志方法的参数定义为不定长的,用的时候传递什么,就在日志文件中写入什么。

                return:用于结束函数,选择性的调用返回一个表达式,不带参数的return返回None,可以返回多个值,保存在一个元组里。

4.lambda方法:

匿名方法,没有名字,只用到一次。(主体是一个表达式,而不是一个代码块)

语法:methodName = lambda[arg1[,arg2,....argn]]:expression

例如:sum  =  lambda a,b:a+b

十一、类

类的定义:

class 类名():

。。。

对象的创建: 对象名 = 类名()

self-->指的是对象本身,例如 self.name -->指的是对象的名字。(相当于java的this)

  1. 构造方法

类有一个名为_init_()的特殊方法(构造方法),该方法在类实例化时会自动调用。不写默认为空。

格式一:def _init_(self):  (无参构造)

格式二:例如:def _init_(self,name,age,leg): (有参构造)

与java不同,只能定义一个。

例如:  def __init__(self,name,age,leg):

self.name = name

self.age = age

                     ...

2.私有变量和私有方法

私有变量:__变量名

私有方法: def  __方法名:

随机数字:random, 使用要导包random

rand = random.randint(0,100):生成一个0-100的整形数据

3.继承

calss DerivedClassName(BaseClassName1):

<statement-1>

 ...

<statement-N>

重写就直接重新在子类写一遍方法即可。

子类想添加新的属性进入构造方法里,可以 父类名.__init__(self,xx,xx)

4.python模块(Module)

是一个python文件,以.py结尾,包含了python对象定义和方法

作用:它是为了实现某一类需求的功能的方法集合;

  1. 模块让你能够有逻辑地组织你的python代码段。
  2. 把相关的代码分配到一个模块里能让你的代码更好用和更易懂。
  3. 模块能定义函数,类和变量,模块里也能包含可执行的代码。

模块的使用:

     1.import  math  ->  把math中定义的所有类和方法的副本导入到本文件中

     2.form  xxx  import  yyy  ->导入想用模块中的某一部分(可以是变量、方法、类),使用时直接用变量名、方法名和类名就可以了,起别名as

               

标准库:python的安装目录/Lib下

        sys :sys.path-》使用import时,默认从这个列表路径去找

        os :

第三方库:python的安装目录/Lib/site-packages

        selenium:web端自动化测试所需要的包(文件夹(要有一个__init__.py),其中包括很多模块)

        appium:app自动化测试所需要的包

        BeatifulReporter:把脚步运行结果以比较漂亮的格式输出(HTML格式)

        pymysql:帮我们链接数据库,并且可以进行crud的包

 想到导入其他位置的包:

      path = sys.path

      path.append=追加的路径(相对路径)

      imprint

十二、相对路径

第一种相对路径的用法

只在vscode编写或者执行的时候可以用

   #vscode的工程目录:通过file - 打开文件夹(打开的文件夹就是工程目录:python目录)

   工程目录:./

   

第二种相对路径的用法

最保险,获取当前编辑文件的所在目录

   dirn  = os.path.dirname(__file__)    获取当前文件的路径

  path.append(dirn)

十二、测试常用代码

      if __name__==__main__:

        测试代码(本模块内执行)

    else:

        其他模块调用语句

      (为True可以执行本模块,Flase则是其他模块调用)

十三、异常

异常格式

try/except

try:

代码

except exception as e:  

异常处理

finally:

必须执行代码   

       

通过raise触发异常:

raise[Exception[,args,[,traceback]]]

自定义异常处理类,并调用该类型进行异常处理,异常类应直接或间接继承自exception类

例:

class  myException(Exception):

      def__init__(self,error,msg)

      self.error = error

      self.msg = msg

try:

raise myException(1,’my exception’)

except  Exception as e:

print str(e)

异常原则

内置异常:

  1. 找到并合理使用python的内置异常(Built-in Exception)
  2. 理解python的内置异常分别对应什么情况
  3. 阅读你的代码,找到你的代码里可能会抛出内置异常的地方,仅队这几行代码做异常处理

慎用异常:

  1. 使用异常应该再不得不用的情况下,捕获正确的异常,不要直接try except,不能将逻辑错误隐藏起来
  2. 异常的处理,要合理,要有日志。

十四、IO文件读写

打开文件:open

语法:

file_obj = open(filename,mode)【打开文件的时候需要指定字符集encoding=”utf-8”】

例:open=(r”文件地址”,”w”,encoding=”utf-8”)

filename:

原字符串:r‘c:\\temp\\text.txt’

转移字符串‘c:\\temp\\text.txt’

mode:

r   只读方式(默认)

w   打开文件只写入,覆盖写入

a   打开一个文件用于追加

+   r+,w+都是以读写模式,区别在于r+必须是已存在的文件,而w+可以创建文件

b   二进制

读方式:

read(size):从文件读取指定的字节数,如果未给定或未负责读取所有

readline(size):用于从文件读取整行,包括“\n”字符,指定非负整数,则返回相应的字节数

readlines(size):读取所有行并返回列表,如size大于0,则一次性返回相应的字节数(减少压力)

写方式:

write(str):将字符串写入文件,返回的是写入的字符长度

writelines():向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符

关闭文件:close

file_obj.close()

注意事项

1.读取文件的时候,如果其中包括中文字符,要保证字符集的一致性,python默认中文字符集是gbk,而若文件是utf-8格式,在读取文件的时候,采用encoding=”utf-8”

2.对文件读写的时候会抛IO异常,要进行异常处理

3.with语句使用(后面读写文件就是这个格式,自动close文件,并且无需抛异常)

      with  open(地址,读写方式,encoding=字符集) as  f:

           print(f.readline())

用open打开一个文件,此时调用的是w写入模式,下面使用read是没有权限的,你得使用w+读写模式

csv文件读操作

测试用例的参数,需要从外部文件读入数据csv、excel文件

数据库导出数据格式csv

  1. 创建csv文件

       创建一个excel文件,输入数据,另存为带逗号分隔符的utf-8格式的csv文件

       再使用软件打开csv文件,使用编码--》转为utf-8格式,保存退出

  1. 在脚本中导入csv模块
  2. 使用with语句打开文件
  3. 使用csv的方法读取数据(csv.reader(file.open()))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值