zoukankan      html  css  js  c++  java
  • python_函数_文件

     
    函数
    1、面向对象的编程
    2、面向过程的编程   #没有return的叫做过程
    3、函数式编程       #有return的返回叫做函数  
    传参的方式
    1、可以定义默认传参的方式,位置调用的传参方式,与位置有关
    def run(x=1,y=2) print (x,y) run()
    2、关键字调用,与位置无关,会输出 2,1
     
    def test1(x,y):
        print (x)
        print (y)
     
    test1(y=1,x=2)
     
    ps : 关键参数不能在中间
     
     
    3、参数组传参(单*)
    接受的是N个位置参数,不能接受关键字参数,最终会转换成元祖
    def  test1(*args):
        print (args,type(args))
        for data in (args):
            print (data,type(data))
     
    test1(1,3,4,5)
     
     
    def test1(x,*args):
        print (x)
        print (args)
    test1(1,2,3,4,5,6)
     
    4、参数组传参(双*) 接收的是字典,传入的关键子必须是key=value格式就是字典格式
    **kwargs参数组必须往后放置 def test1(**kwargs): print (kwargs) test1(name="alex",age="20",sex="nan")
     
    小练习
    def test1(x,y,z=1,*args,**kwargs):
        print (x)
        print (y)
        print (z)
        print (args)
        print (kwargs["name"])
     
    test1(1,2,3,4,5,6,name="alex",age="20",sex="nan")
    输出
    1
    2
    alex
    (4, 5, 6)
    {'name': 'alex', 'sex': 'nan', 'age': '20'}
     
     
    局部变量和全局变量
    一、在函数内生效的变量叫全局变量
    二、在全局生效的变量叫全局变量
     
    三、递归函数
    特性
    1.必须有明确的结束条件
    2.每次进入下一个递归层的时候都应该比上一层有所减少
    3.递归层次不高,容易导致内存溢出
     
    四、高阶函数
    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
     
    def add(x,y,f):
        return f(x) + f(y)
     
     
    res = add(3,-6,abs)
    print(res)
     
    eval可以把str转成字典
    比如说在python3中用input这个函数,传入的都是str类型,这样的话可以用
    user_input = eval(uesr_input)
    给转成字典再处理非常好使
    case
    {'bakend': 'www.old.org','record':{'server': '100.1.7.9','weight': 20,'maxconn': 30}}
     
    练习如何在文件中替换修改字符
    因为在用a+ r+等的时候都会向文件末尾进行追加,当需要修改一个文件的内容的时候只有2种方法
    1、写到内存中修改,修改完毕用truncat清空文件再写回去
    2、直接w+创建另外一个文件,把东西写到另外一个文件,再os.rename os.remove替换文件
    case1 内存中修改
    def run():
    f = open("tmp1.txt","a+") #这里F打开文件后指针就已经去了末尾
    f.seek(0) #将指针指会开始位置,否则f.read读不到东西
    m = f.read()
    print (m)
    f.seek(0)          #读完后指针又去了末尾,把他再调回起始位置
    f.truncate(0)        #截断文件,0代表从起始位置开始截断
    s = m.replace("test abc","xxxxxxxxxt") #这里替换一个字符串
    f.write(s)               #写入字符串
    run()
    tmp1.txt的内容是
    test
    abc
    123
     
    a+的方式
    读写的方式打开文件,若文件不存在则创建文件
    写的方式是指追加
    with open("test.txt","a+") as f:
      f.write("123
    ")
    读的方式是指 with open(
    "test.txt","a+") as f:   f.seek(0)   d = f.read()   f.write("123 ")   print (d)

    r+和a+的最大区别就是

    r+如果先读后写,则是末尾追加,如果直接写则是覆盖

    先读后写
    
    with open("test.in", 'r+')as f:
        f.readline()
        f.write("addition")
    
    hello1
    ok2
    byebye3
    addition

    r+的方式

    r+的方式是读写方式打开

    with open("test.txt","r+") as f:
      print(f.tell()) #这里输出的位置是0
      print(f.read()) #因为是0开始的所以这里会输出所有内容
      print(f.tell()) #这里输出的是文件末尾

    写的方式是覆盖原有内容,从0开始写入
    with open("test2.txt","r+") as f:
        print(f.tell())           #还是从0开始
    f.write("aaaaaaaass ") #但是文件写入的方式是覆盖原有内容

    tell()判断指针的方法

    这里假设test2.txt文件内容是

    1
    2
    3
    with open("test2.txt","r+") as f:
        print (f.tell())
        d=f.read()
        print (len(d),f.tell())

    输出结果如下,也就是说指针对这的是末尾的空字符,假设你有空格回车都要算上,最后len长度+1就是你指针的位置

    0
    5 7
  • 相关阅读:
    打造分布式爬虫
    vue入门-常用指令操作
    爬虫练习-爬取小说
    爬虫项目-爬取亚马逊商品信息
    爬虫框架_scrapy1
    CIE-LUV是什么颜色特征
    多目标跟踪baseline methods
    时间序列识别代码调试版本1
    拓扑空间1
    ps cs6破解
  • 原文地址:https://www.cnblogs.com/zoee/p/5753044.html
Copyright © 2011-2022 走看看