zoukankan      html  css  js  c++  java
  • 第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)  # 取差集
    

      

  • 相关阅读:
    严格模式
    排序,求最大值最小值
    原型继承
    android 系统
    BASE64Decoder
    jstl
    list  遍历
    2015GitWebRTC编译实录9
    2015GitWebRTC编译实录8
    2015GitWebRTC编译实录7
  • 原文地址:https://www.cnblogs.com/qiezizi/p/8252526.html
Copyright © 2011-2022 走看看