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')\n"
- f.read() #此刻read的时候,是接着上面的readline往下读
- "\nf.copy('xx1.txt')\n\nf.close()\n"
- f.read()
- ''
- f.seek(0,0) #如果读了一遍在想读一遍,那就这样写,使用seek把它拉回来
- 0
- f.read()
- "f = open('xxx.txt')\n\nf.copy('xx1.txt')\n\nf.close()\n"
- 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)
Python 基础知识(5)的更多相关文章
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- python基础知识(二)
以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍
- python 基础知识(一)
python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
- python基础知识小结-运维笔记
接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...
- Python基础知识(五)
# -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春药# @Email : zhou_wanchun@qq.com# @Fi ...
- Python基础知识(Basic knowledge)
Python基础知识(Basic knowledge) 1.认识Python&基础环境搭建 2.Python基础(上) 3.Python基础(中) 4.Python基础(下) 5.Python ...
- Python 基础知识(一)
1.Python简介 1.1.Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时 ...
随机推荐
- eclipse svn org.tigris.subversion.javahl.ClientException: RA layer request failed
突然之间eclipse使用svn更新项目时报错,org.tigris.subversion.javahl.ClientException: RA layer request failed 网上搜的都是 ...
- java 常量表达式
原文地址:http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28 这是我翻译的,以备不时之用. 常量表达式是一个代 ...
- 浅谈JavaScript的事件(事件流)
事件流描述的是从页面中接收事件的顺序.IE的事件流失事件冒泡,而Netspace的事件流失事件捕获. 事件冒泡 IE的事件流叫事件冒泡,即事件开始时,由具体的元素(文档中嵌套层次最深的节点)接收,然 ...
- Python 005- 使用Pyecharts来绘制各种各样的图形
本文转载自:https://blog.csdn.net/qq_39143076/article/details/79065448,如有侵权,请联系删除啊 如何做Python 的数据可视化? pyech ...
- FFT用到的各种素数
int MOD; inline int mul(int a, int b){ return (long long)a * b % MOD; } int power(int a, int b){ ; ) ...
- poj 2228 Naptime(DP的后效性处理)
\(Naptime\) \(solution:\) 这道题不做多讲,它和很多区间DP的套路一致,但是这一道题它不允许断环成链,会超时.但是我们发现如果这只奶牛跨夜休息那么它在不跨夜的二十四个小时里一定 ...
- MFC中CAsyncSocket和CSocket
原文链接:https://blog.csdn.net/libaineu2004/article/details/40395917 摘要部分重点: 1.CAsyncSocket类逐个封装了WinSock ...
- Delphi语言最好的JSON代码库 mORMot学习笔记1(无数评论)
mORMot没有控件安装,直接添加到lib路径,工程中直接添加syncommons,syndb等到uses里 --------------------------------------------- ...
- webpack与grunt/glub 的比较
webpack.grunt.glub 都是前端打包的工具: grunt/gulp 的工作方式是:在一个配置文件中,指明对某些文件进行压缩.组合.检查等任务的具体步骤,然后在运行中输入相应的命令. we ...
- POJ3680 Intervals —— 区间k覆盖问题(最小费用流)
题目链接:https://vjudge.net/problem/POJ-3680 Intervals Time Limit: 5000MS Memory Limit: 65536K Total S ...