zoukankan      html  css  js  c++  java
  • Python 基础知识(5)

    1:引用

    当我们把一个变量给另一个变量赋值的时候,不是把A变量中的值给B一份,而是把A变量中的地址给了B,这就是引用。任何牵扯到等号赋值的地方,统统都是引用。

    a = 100
     
    b = a
     
    id(a)   #查询变量所在的位置
    498953904
    id(b)
    498953904
    
     
    A = [11,22,33,44]
    B = A
     
    id(A)
    96368560
    id(B)
    96368560
    
    A
    [11, 22, 33, 44]
    B
    [11, 22, 33, 44]
     

     2:可变类型、不可变类型

    可变类型:你定义完成之后还可以修改

    不可变类型:你定义完成之后死活修改不了

    不可变:数字(a = 100,100的这个数值就无法修改)、字符串(a = 'hello',a[0] = w,就会提示字符串是无法修改类型)、元祖(a = (11,22,33),a[0]='ffff',不可变)

    可变:列表(a = [11,22,33],a[0]='ffff',列表可以修改)、字典(a = {'name':'loawang'},a['name']='laoli',字典可以修改)

    类似于买了一本书和一个本子,本子可以修改,书上的字体无法修改。

    3:递归 

    一个函数里面调用了函数本身自己,这样叫递归。

    def getnum(num):
        if num > 1:
            return num * getnum(num-1)
        else:
            return num
    
    result = getnum(4)
    print(result)

    4:匿名函数

    我们定义一个列表,然后拍下顺序显示, 

    那我们定义一个列表,里面存放字典,来试试排序。从大到小排序 num.sort(reverse=True)

    为什么会提示错误呢?那我们该怎么样让字典排序呢?

    num = [{'name':'laowang','age':11},{'name':'zhangsan','age':12},{'name':'banzhang','age':20}]
    
    num.sort(key=lambda x:x['name'])
    print(num)

     key=xx,就按照你key的参数来排序。比如后面写的name就按照name,如果是age,就按照age排序

     5:匿名函数的调用

    def test(a,b,func):
        jieguo = func(a,b)
        print(jieguo)
    
    test(11,22,lambda x,y:x+y)
    
    #a指向了11,b指向了12,func指向了lambda x,y:x+y,往下走
    #func(a,b),lambda x,y:x+y 也就指向了x:11,y:12

    6:匿名函数的调用-扩展

    Python是动态语言,如果我们需要用户来输入匿名函数计算,应该如何操作

    #coding=utf-8
    def test(a,b,func):
        jieguo = func(a,b)
        return jieguo
    func_new = input('请输入一个匿名函数:')
    func_new = eval(func_new)   #eval类似于int,是转型的意思,因为用户输入的是字符串,所以用eval来转换,要不然会出错
    
    num = test(11,22,func_new)
    print(num)

    7:交换2个变量的值的方式

    假如,我们现在有两个值,a,b,a=4,b=5,我们想把这两个值交换一下,我们该如何操作?

    a = 4
    b = 5
    c = b
    b = a
    a = c
    print("a=%d,b=%d"%(a,b))
    
    #我们可以在调用一个变量来完成数值的调换

    比如现在说,只有a和b变量,其他变量都没有,你该如何操作?

    a = 4
    b = 5
    
    a = a+b   #a=9
    b = a-b   #b=9-5=4
    a = a-b   #a=9-4=5
    
    print("a=%d,b=%d"%(a,b))

    那除了上面的两种方法还有没有其他的方法?

    a = 4
    b = 5
    a,b = b,a
    print("a=%d,b=%d"%(a,b))

     8:文件的介绍

    文件的操作:打开或者新建一个文件、读写数据、关闭文件。就像打开word一样。

    如何在程序中打开一个文件呢?

    f = open('test.py','w')
    f.close() #关闭文件的时候一定要加close
    #open打开test.py的这个文件,后面一定要跟一个双引号,里面写上r或者w或者其他,r是读,w是写,完成之后找个变量存起来

    当然后后面除了跟r和w之外还有这些

     9:文件的读写操作

    f.read():是读取文件内容,读取完成之后,在read就没有了,所以没有了就显示空白了,写完之后记得f.close()

     

    我们在来演示f.read()的另一种方法,f.read(1)的意思是每次读取一个数值,依次往下,读完之后显示读取空白,当然里面的数值可以随意修改,f.close()

     我们来试试写‘w’,里面是没有test1的文件的,我们w直接创建文件,f.write()添加写入的内容,下面显示的9是指你输入的字符串有9个。f.close()保存下,我们来看看效果

    果然是我们写入的内容

    我们在交互模式环境下,写一个并且读出来

    我们先写在test.py里面,然后python执行以下看看有什么变化

    我们现在来执行下。执行完之后,果然有了xxx.txt的文件

    现在我们如何把这个文件给读取出来呢?

    这就就读取出来了。

     10:复制文件

    选在有这样一个需求,根据用户的输入,来复制一份文件并保存。该如何操作

    我们先创建一个py的文件

    再来梳理代码

    #1.获取用户输入的文件名
    old_file_name = input('请输入你要复制的文件名:')
    
    #2.打开要复制的文件
    old_file = open(old_file_name,'r')
    #3.新建一个文件
    new_file = open('laowang.txt','w')
    #4.从九文件中读取数据,并写入到新文件中
    content = old_file.read()
    new_file.write(content)
    #5.关闭2个文件
    old_file.close()
    new_file.close()

    来看看有没有复制成功

    成功是成功了,但是似乎 有一点点小瑕疵,我们复制的是.py的文件,但是复制完成之后的确实.txt的文件,那我们如何把txt变成py文件呢?

    #1.获取用户输入的文件名
    old_file_name = input('请输入你要复制的文件名:')
    
    #2.打开要复制的文件
    
    old_file = open(old_file_name,'r')
    
    new_file_name = '[复制]' + old_file_name
    #3.新建一个文件
    new_file = open(new_file_name,'w')
    
    #4.从九文件中读取数据,并写入到新文件中
    content = old_file.read()
    new_file.write(content)
    
    #5.关闭2个文件
    
    old_file.close()
    new_file.close()
               

     如果不让你用这种方法,还有没有其他的办法?

    #1. 获取用户要复制的文件名
    old_file_name = input("请输入要复制的文件名:")
    
    #2. 打开要复制的文件
    old_file = open(old_file_name,"r")
    
    #test.py  -----> test[复件].py
    #new_file_name = "[复件]"+old_file_name
    position = old_file_name.rfind(".")
    new_file_name = old_file_name[:position] + "[复件]" + old_file_name[position:]
    
    #3. 新建一个文件
    #new_file = open("laowang.txt", "w")
    new_file = open(new_file_name, "w")
    
    #4. 从旧文件中读取数据,并且写入到新文件中
    content = old_file.read()
    new_file.write(content)
    
    #5. 关闭2个文件
    old_file.close()
    new_file.close()

    11:大文件的处理方式

    我们知道xx.read(1)是一个一个的读,现在来学习一个一行一行的读,readline

    还有一个参数是:readlines,就是相当于读了好几个readline并且用列表的方式把他们框起来

     如果有一个很大的文件,比如5G,试想如何把文件读取到内存然后进行处理呢?有一点要记住,处理文件过大的时候不要用read,我们依旧打开上面的文件,来进行稍微的修改就可以满足我们的需求了

    #1. 获取用户要复制的文件名
    old_file_name = input("请输入要复制的文件名:")
    
    #2. 打开要复制的文件
    old_file = open(old_file_name,"r")
    
    #test.py  -----> test[复件].py
    #new_file_name = "[复件]"+old_file_name
    position = old_file_name.rfind(".")
    new_file_name = old_file_name[:position] + "[复件]" + old_file_name[position:]
    
    #3. 新建一个文件
    #new_file = open("laowang.txt", "w")
    new_file = open(new_file_name, "w")
    
    #4. 从旧文件中读取数据,并且写入到新文件中
    while True:
        content = old_file.read(1024)
    
        if len(content)==0:   #这里如果content的返回结果是空的,那就意味着已经读完了,读完了就退出,这样就不会产生死循环了
            break
    
        new_file.write(content)
    
    #5. 关闭2个文件
    old_file.close()
    new_file.close()

     12:文件的定位读写

    f = open('copy.py','r')
    
     f.seek(2,0) #这里写2,就是从文件的开头往后跳两个字节
     2
    
     f.readline()
     "= open('xxx.txt')
    "
    
     f.read()  #此刻read的时候,是接着上面的readline往下读
    "
    f.copy('xx1.txt')
    
    f.close()
    "
    
     f.read()
     ''
    
     f.seek(0,0)  #如果读了一遍在想读一遍,那就这样写,使用seek把它拉回来
     0
    
     f.read()
    "f = open('xxx.txt')
    
    f.copy('xx1.txt')
    
    f.close()
    "
    
    f.tell()  #打印你当前的位置
    50
    
    f.seek(0,0)
    0
    
    f.read(1)
    'f'
    
    f.tell()
    1

    13:文件的常见操作

     我们来说说,重命名和删除文件的操作

    重命名文件:

    import os  #我们先导入一个os模块,是一个工具箱,能完成系统相关的操作

    删除文件:

    os.remove('yyy.txt')

    创建一个文件夹:

    os.mkdir('张三')

    删除一个文件夹:

    os.rmdir('张三')

     查看当前目录路径

    f = open('xxx.txt','w')  #我们先建立一个xxx.txt的文件
    os.getcwd()  #用此条命令来查看当前路径,记得关闭
    '/py'  

    改变文件路径,假如我们创建一个文件,想把它放在指定的路径,我们应该如何操作

    f = open('../yyy.txt','w')  #这样来创建
    
    f.close()
    
    os.chdir('../') #返回上一级目录

    获取目录列表

    os.listdir('./')  #以列表的形式把当前文件夹内所有的文件显示出来,也可以写绝对路径,这个根据自己需求,这里只是测试
     
    ['laowang.txt',
     'duqu[复件].py',
     'duqu.py',
     'xxx.txt',
     'yyy.txt',
     'copy[复件].py',
     'yyy1.txt',
     '复制文件.py',
     '[复制]test.py',
     '__pycache__',
     '.copy.py.swp',
     'copy.py',
     'test.py']

     14:批量重命名

    import os
    #1:用户输入需要修改的文件夹
    folder_name = input('请输入需要修改的文件夹:')
    #2:打印出用户输入的文件夹内容
    file_names = os.listdir(folder_name)
    os.chdir(folder_name)
    #3:重命名
    for name in file_names:
            print(name)
            os.rename(name,'[Willam出品]-'+name)

    还有没有其他方法?

    import os
    
    #1. 获取要重命名的文件夹 名字
    folder_name =  input("请输入要重命名的文件夹:")
    
    #2. 获取制定的文件夹中的所有 文件名字
    file_names = os.listdir(folder_name)
    
    #os.chdir(folder_name)
    
    #3. 重命名
    for name in file_names:
        print(name)
        old_file_name = folder_name+"/"+name
        new_file_name = folder_name+"/"+"[京东出品]-"+name
        os.rename(old_file_name, new_file_name)
  • 相关阅读:
    积分图像
    [悟] 因上努力,果上随缘(转)
    不要走的太匆忙( 转)
    一个程序员如何快速赚到一百万?(转)
    vi文字处理器
    Linux常用命令
    Hadoop之MapReduce
    Hadoop全分布模式操作
    Hadoop之HDFS
    Hadoop生态系统
  • 原文地址:https://www.cnblogs.com/willamwang/p/8257463.html
Copyright © 2011-2022 走看看