双子座自动化测试day5

本次博客内容记录第三次自动化测试课程(2019.03.29)的主要知识点,主要包括python基础中的函数参数,变量,模块的使用

一.函数

1.函数参数

#1 必传参数(位置参数)
# def say_hello(word):
#     print(word)

#2 默认值参数
# def say_hello(word='hello'):
#     print(word)
# say_hello()
# say_hello('hi')

# 利用参数,使用一个函数实现文件读写功能
# 另外,如果改成with open方式,会更加简洁(可省略close步骤)
# def op_file(file,content = None):
#     import json
#     result = None # 如果不写此句,写文件后return result会提示result没有定义
#     if content:
#         f = open(file,'w',encoding='utf-8')
#         #f.write(content)
#         json.dump(content,f)
#     else:
#         f = open(file,encoding='utf-8')
#         # res = f.read()
#         result = json.load(f)
#     f.close()
#     return result

#3 参数组
# def send_mail(*names):
#     for name in names:
#         print('给%s发邮件'%name)
#不传参数
# send_mail()

#传1个
# send_mail('xiaohei')

#传n个
# send_mail('xiaohei','xiaobai')

#传过去的是一个什么东西:元组

# def szz(name,age,sex,addr,qq):
#     print(name,age,sex)

# 位置参数与关键字参数
# 可以全部用位置参数,位置是一一对应的
# 也可以全部用关键字参数,指定关键字,不需要按照顺序传参
# 还可以混合用,但是要先写位置参数,再写关键字参数,关键字参数后面不能再出现位置参数
#
# szz(addr='大连',qq=111,sex='female') #关键字参数,可以不按照参数顺序传值
# szz('xiaohei',18,addr='beijing',sex='男')# 位置参数+关键字参数

#4 关键字参数

# def xiaohei(**info):
#     print(info)

# 参数是否必传:不必传
# xiaohei()
# 位置参数传参是否可以:不可以
# xiaohei('aaa',28)
# 关键字参数传参是否可以:可以
# xiaohei(name='lalala',age=18)
# 是否限制参数的个数:不限制
# xiaohei(name='hahah')

# 综合练习

def xiaobai(name,age=None,*args,**kwargs):
    print(name)
    print(age)
    print(args)
    print(kwargs)

xiaobai('xiaobai',18,'beijing','shanghai',money=500,func='xiaobai')

2.函数参数解包

#解包

def op_mysql(host,port,user,passwd,db):
    print(host)
    print(port)
    print(user)
    print(passwd)
    print(db)
#
# db_info = ['127.0.0.1',3306,'root','123456','szz']
db_info2 = {
    'host':'127.0.0.1',
    'port':3306,
    'user':'szz',
    'passwd':'123456',
    'db':'szz'
}
# op_mysql(*db_info) # 调用函数时,使用*这个格式,代表拆开列表分别传给函数对应参数
op_mysql(**db_info2) # 使用**格式,代表解包字典;字典的key必须与函数形参名称一致

3.函数返回值

# return结束函数作用:所以res结果为0
# def xiaobai():
#     for i in range(100):
#         print(i)
#         return i
#
# res = xiaobai()
# print(res)

# 返回多个值时,以元组形式返回
# def get_file(age,name,addr):
#     # 当前目录有多少文件
#     # 这些文件的文件名
#     age += 5
#     name = 'szz_'+name
#     addr = 'beijing_'+addr
#     return age, name, addr
#
# res = get_file(19,'小黑','天通苑')
# print(res)
#
# # 可以再用三个元素接收
# age,name,addr = get_file(19,'小黑','天通苑')
# print(age)
# print(name)
# print(addr)

# 在参数名后面加":类型",表示指定参数类型,可以使用类型对应方法
# def add_user(username:str,password:list):
#     print('username',username)
#     print('password',password)
# # 不按照指定类型传值时,也不会报错
# add_user([1,2],'12345')


# 递归:函数自己调用自己,最深999次

# def say():
#     print('say')
#     say()
#
# say()

def say():
    num = input('请输入一个数字:').strip()
    if int(num)%2!=0:
        print("请重新输入")
        say()
    return True
say()

4.内置函数

# input()
# print()
# int
# float
# dict(a=1,b=2)
# list('123')
# set()
# tuple()

# bool
# print(bool(''))
# print(bool(None))
# print(bool([]))
# print(bool({}))
# print(bool(()))
# print(bool(0))

# type
# id
# len

# res = sum([1,2,3,5,6])
# print(res)
# max()
# min()
# print(round(1.99199,2))
# print(divmod(10,3)) #取余数


# def abc():
#     a = 1
#     print(globals())
#     print(locals())
# abc()
# print(globals()) # 取当前python文件中的所有变量
# print(locals()) # 取函数里面的所有局部变量

# print(chr(65)) # ascii码对应的字符
# print(ord('A')) # 字符对应的ascii码
# 字符集编码,让计算机认识汉字,英文字母(计算机只认识0,1)
# ascii gb2312 gbk Unicode(utf-8)

# print(dir({})) # 查看有哪些方法

# enumerate # 枚举
# l = ['a','b','c','d','e','f']
# for id,i in enumerate(l,1):
#     print('%s=>%s'%(id,i))

# exec # 运行python代码
# code = '''
# for i in range(5):
#     print(5)
# '''
# exec(code)

# filter() # 下次课程
# map() # 下次课程


# eval() # 执行简单的python代码
# print(eval('[1,2,3,4]'))

# zip() # 把n个list合并变成二维数组
# l1 = ['xiaoming','xiaobai','xiaohei']
# l2 = [111,222,333]
# res = list(zip(l1,l2))
# print(dict(res))

二.全局变量与局部变量

# 全局变量和局部变量
# 局部变量:定义在函数里面,局部变量只能在函数里面使用,出了函数外面不能调用
# 尽量少用全局变量,因为会一直占用内存,且容易被修改


# name = 'abc'
#
# def func():
#     name = 'abc2'
#     print('1',name)
# func()
#
# print('2',name)

# 函数里修改全局变量
# money = 0
# def husband():
#     global money
#     money +=500
#
# def wife():
#     global money
#     money -= 200
# print('最开始的money:',money)
# husband()
# print('挣钱之后的money:',money)
# wife()
# print('花钱之后的money:',money)

# 变量调用过程练习:输出值为500
# money = 500
#
# def test(consume):
#     return money - consume
# def test1(money):
#     return  test(money) + money
#
# money = test1(money)
# print(money)

#函数调用练习2:因为test()未被调用,输出会报错
# def test():
#     global a #定义a为全局变量
#     a = 5
# def test1():
#     c = a + 5
#     return c
# #增加调用test()之后,输出结果为10
# test()
# res = test1()
# print(res)

# 列表,字典,集合不在函数中不需要声明global;(int,str,tuple需要global声明)
#可变变量类型:字典,list,set
#不可变变量类型:int,str,tuple

stus = ['xiaojun','xiaohei','xiaobai']
stu_info = {
    'name':'xiaohei',
    'age':18
}
stus2 = {'xiaohei','xiaobai'}

def add_stu():
    name = input('name:')
    stus.append(name)
def select_stu():
    name = input('name:')
    print('你的学号是%s'%stus.index(name))

三.随机数

import random
random.randint(1,100)
l = [1,2,3,4,5,6,7,8]
# print(random.sample(['a','b','c'],2))
print(random.choice(l))# 随机取一个元素
print(random.uniform(1,19))# 取随机的小数

random.shuffle(l)# 洗牌
print(l)

四.深拷贝与浅拷贝

# 循环是按照下标循环的,删除元素后新的列表下标发生了变化,所以会漏掉原下标为1的元素
# 循环删除list时都会有这种问题,所以循环时不要删除元素,下标会错乱
# li = [1,1,2,3,4,5,6,7,8,9]
# for i in li:
#     if i%2!=0:
#         li.remove(i)
# print(li)

# 解决方法,用两个相同list,循环list2删除list1
# li = [1,1,2,3,3,4,5,6,7,8,9]
# l2 = [1,1,2,3,3,4,5,6,7,8,9]
# l2 = li[:] # 这种可以
# l2 = li # 这种不可以
# print(id(li))# 查看li的内存地址
#
# for i in l2:
#     if i%2!=0:
#         li.remove(i)
# print(li)

#深拷贝:不同的内存地址
# li = [1,1,2,3,3,4,5,6,7,8,9]
# l3 = li[:]

import copy
d = {'name':'xiaobai','l':[4,5,6]}
# d1 = copy.deepcopy(d)
d1 = copy.copy(d)  # 浅拷贝:虽然内存地址不一样,但是多层嵌套时,还是会改变值
d1['l'].append(8)
d1['age'] = 18
print(id(d))
print(id(d1))
print(d)
print(d1)

#浅拷贝:指向同一内存地址
# li = [1,1,2,3,3,4,5,6,7,8,9]
# l2 = li

# d = {'name':'xiaobai'}
# d1 = d
# d1['age'] = 18
# print(d)

五.os模块

import os
# os.rename('old','new')
# os.remove('')
print(os.listdir(r'.')) # 列出某个目录下的所有内容,前面加r
print(os.getcwd()) # 获取当前目录
print(os.path.getsize('随机数.py')) # 获取某个文件的大小

# os.mkdir('abc') # 父目录不存在时,会报错
# os.makedirs('zzl/abc') # 父目录不存在会创建一个

os.path.exists() # 判断文件夹是否存在
os.path.isdir() # 判断是否是文件夹
os.path.isfile()# 判断是否是文件

猜你喜欢

转载自www.cnblogs.com/zzl991/p/10776521.html