第4课:函数、模块、集合

 1. 文件读写:b模式

import requests 
url = 'http://www.nnzhp.cn/wp-content/uploads/2018/01/601a335c499837a995ae10867fc36101.png' 
img = requests.get(url).content f = open('hhh.jpg', 'wb') # bytes:以二进制模式打开,有wb、rb、ab组合
f.write(img) 

   拓展:

f = open('haha.txt','w')
f.write('test')
# 不加下面这个这句,有时会在文件中看不到写入的数据,是因为有缓冲区,它会等缓冲区数据存储到一定的值才会写入到磁盘
f.flush() #立即把缓冲区的内容写到磁盘里面。
time.sleep(50)

with open('b.txt') as f,open('c.txt') as fc:#自动关文件指针;一个with可以打开多个文件,逗号隔开即可。
  f.write('aaa')

2.  修改文件的2种方式:

# 粗暴直接,适用于小文件,内容少
with open('geci','a+',encoding='utf-8') as f:
    f.seek(0)
    all = f.read()
    new_all = all.replace('二','一')
    f.seek(0)
    f.truncate()
    f.write(new_all)
    f.flush()
# 替换一个文件中的内容,直接修改文件不好实现,一般把修改后的文件内容保存到bak文件,删除原来文件,rename bak文件。
# .**文件是隐藏文件
with open('geci.txt', 'r+', encoding='utf-8') as f, open('.geci.bak', 'w', encoding='utf-8') as ff:
    for i in f:
        newline = i.replace('一', '二')
        ff.write(newline)
os.remove('geci.txt')
os.rename('.geci.bak', 'geic.txt')

3.  函数

# 函数:就是把一堆代码组合到一起,变成一个整体
# 提高代码的复用性
# def hello(filename,content): 这种是位置参数,必填参数
# def hello(filename,content='ceshi'): # 默认值参数,非必填
def hello(filename,content=''): #形参
    with open(filename,'a+',encoding='utf-8') as f:
        if content:
            f.write(content)
        else:
            f.seek(0)
            res = f.read()
            return res

print(hello('demo.txt')) #实参
# return 立即结束函数 print(hello('demo.txt','1243')) #函数没有写return的话,返回值是None,返回值不是必须写的,需要获取函数返回值再写 a = 100

  可变参数

# 可变参数,*args
def test(a,b=1,*args):
    # print("a",a)
    # print("b", b, type(b))
    print('args',args)
test("haha")
# 如果后面有多余的参数,会把它保存到args元组中
test("haha",'22','1','2')

  关键字参数

# 关键字参数
def test2(a, **kwargs):
    print('a:',a)
    print(kwargs)
test2(a=1,name='test') # {'name': 'test'}

  练习题

print('-1'.isdigit())  # 判断一个字符串是否是纯数字
# 1.写一个校验字符串是否为合法的小数
# 0.88
# -0.99

def check_float(num):
    str_num = str(num)
    print("str_num:",str_num)
    if str_num.count('.') == 1:
        left = str_num.split('.')[0]
        right = str_num.split('.')[1]
        print("left %s;right %s" % (left,right))
        if left.isdigit() and right.isdigit():  # 正小数
            return True
        elif left.startswith('-') and left.count('-') == 1:
            if left.split('-')[-1].isdigit() and right.isdigit():
                return True
    return False
print(check_float('-1.-1'))  # 这里如果直接传float型数字,传参过程中会自动给把数字给你转型。

4.  模块

# 一个Python文件就是一个模块
# 1.标准模块
#   python自带的,不需要安装
# 2.第三方模块
#   手动安装
#   # 首先下载安装包
#       解压
#       在命令行里面进入到这个解压之后的目录(windows下如何快速进入cmd命令窗口:按住shift+右键:在此处打开命令窗口)
#       执行python setup.py install
#
# 3.自己写的python文件
# import xx 导入一个文件的实质:把这个python文件运行一次
# import hahaha
# import 导入文件时,首先从当前目录下找这个文件
# 然后从python的环境变量中寻找
# 环境变量是让在任何目录下都能使用这个命令
import sys
print(sys.path)  # 查看系统的环境变量,在pycharm下执行这句,会把工程根目录也打印出来,这是pycharm自动加上的。

5.  递归

# 递归:自己调用自己
count = 0


def test1():
    global count
    count += 1
    # num = 8
    # num = int(input('please enter a number:'))
    # if num%2==0:# 判断输入的数字是不是偶数
    #    return True # 如果是偶数的话,程序就退出了,返回true
    print('不是偶数请重新输入!')
    return test1()  # 如果不是偶数的话继续调用自己,输入值
print(test1())  # 调用test
# 用递归能实现的用循环都能实现,但最好不用递归,效率较低。
# 递归最多递归999次

6.  集合

# 集合,天生去重
# 集合的作用:
# 1、它可以把一个列表中重复的数据去掉,而不需要你再写判断
# 2、可以做关系测试,比如说有两个班,一个性能测试班,一个是接口测试班的,想找出来既学习了性能又学习了接口测试的同学,就可以用集合

li = [2, 3, 1, 2, 3, 4]
s_list = set(li)  # 这样就定义了一个集合
set1 = set([1, 3, 4, 5, 6])  # 这种方式和上面的都是把list转换成一个集合
set2 = {'hehe', 'hehe1', 'hehe3'}  # 直接定义一个集合

s = set()
s2 = {'1', '2', '3', '4'}
# 集合是无序的,没有办法通过下标取值
s2.add('5')
s2.add('1')
s3 = {'1', '2'}
print(s2.intersection(s3))  # 取交集,生成了1个新的集合,不会修改原来的集合
print(s2)
print(s3)
# print(s3 & s2)  # 取交集
#
# print(s3.union(s2))  # 取并集
# print(s3 | s2)  # 取并集
#
# print(s2.difference(s3))  # 在s2中存在,在s3中不存在
# print(s2 - s3)  # 取差集

  

原文地址:https://www.cnblogs.com/qiezizi/p/8252526.html