网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
直接打印lambda表达式,输出的是此lambda的内存地址
我们再来实现一个简单加和计算:
def add(a, b):
return a + b
result = add(1, 2)
print(result) # 3
lambda 表达式
lambda(参数列表:表达式)
print((lambda a,b : a+b)(1,2)) # 3
2.3.1、无参数
print((lambda :100)())
100
2.3.2、一个参数
print((lambda a: a)(‘hello world’))
hello world
2.3.3、默认参数
print((lambda a, b, c=100: a + b + c)(10, 20))
130
2.3.4、可变参数:*args
print((lambda *args: args)(10, 20, 30))
(10, 20, 30)
注意:这里的可变参数传入到lambda之后,返回值为元组
2.3.5、可变参数: **kwargs
print((lambda **kwargs: kwargs)(name=‘python’, age=20))
2.4.1、带判断的lambda
print((lambda a, b: a if a > b else b)(1000, 500))
1000
2.4.2、列表数据按字典key的值排序
students = [
{‘name’:‘Tom’,‘age’:20},
{‘name’:‘Rose’,‘age’:21},
{‘name’:‘Jack’,‘age’:22},
]
按name值升序排列
students.sort(key=lambda x:x[‘name’])
print(students)
[{‘name’: ‘Jack’, ‘age’: 22}, {‘name’: ‘Rose’, ‘age’: 21}, {‘name’: ‘Tom’, ‘age’: 20}]
按name值降序排列
students.sort(key=lambda x:x[‘name’],reverse=True)
print(students)
[{‘name’: ‘Tom’, ‘age’: 20}, {‘name’: ‘Rose’, ‘age’: 21}, {‘name’: ‘Jack’, ‘age’: 22}]
按age值升序排列
students.sort(key=lambda x:x[‘age’])
print(students)
[{‘name’: ‘Tom’, ‘age’: 20}, {‘name’: ‘Rose’, ‘age’: 21}, {‘name’: ‘Jack’, ‘age’: 22}]
把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。
例如:我们使用一个函数完成计算任意两个数字的绝对值之和
方法一
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3
方法二
def sum_num(a, b, f):
return f(a) + f(b)
result = sum_num(-1, 2, abs)
print(result) # 3
两种方法对比之后,发现方法2的代码会更简洁。函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度快。
2.5.1、内置高阶函数
1、map()
map(func,lst)
:将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回
例如:计算list1
序列中各个数字的2次方
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1)
print(result) # <map object at 0x000001BE8EA76630>
print(list(result)) # [1, 4, 9, 16, 25]
2、reduce()
reduce(func(x,y),lst)
:其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积运算。[reduce()传入的参数func必须接受2个参数]
例如:计算list1
序列中各个数字的累加和
import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result) # 15
3、filter()
filter(func,lst) 函数用于过滤序列,过滤掉不符合条件的元素,返回一个 filter 对象。如果要转换为列表,可以使用 list()
来转换。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result) # <filter object at 0x00000232A64B6630>
print(list(result)) # [2, 4, 6, 8, 10]
========================================================================
在python,使用 open 函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新文件,语法如下
open(name,mode)
-
name : 是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
-
mode : 设置打开文件的模式(访问模式):只读 写入 追加 等
| 模式 | 描述 |
| — | — |
| r | 以只读的方式打开文件,文件的指针将会放在文件的开头。这是默认模式 |
| rb | 以二进制格式打开一个文件用于只读,文件指针将会放在文件的开头。这是默认模式 |
| r+ | 打开一个文件用于读写,文件指针将会放在文件的开头 |
| rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
| wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
| w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
| wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该⽂文件不存在,创建新文件。 |
| a | 打开⼀个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| ab | 以二进制格式打开⼀个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| a+ | 打开⼀个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不不存在,创建新文件用于读写 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,如果该文件不存在,创建新文件用于读写 |
f = open(‘test.txt’,‘w’)
注意:此时的 f 是 open 函数的文件对象
语法:对象.write('内容')
1. 打开⽂件
f = open(‘test.txt’, ‘w’)
2.⽂件写⼊
f.write(‘hello world’)
3. 关闭⽂件
f.close()
注意:
-
w 和 a 模式:如果文件不存在则创建该文件,如果文件存在, w 模式先清空再写入,a 模式直接末尾追加
-
r 模式: 如果文件不存在则报错
语法:文件对象.read(num)
num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
3.4.1、readlines()
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是⼀个列表,其中每一行的数据为⼀个元素。
test.txt 如下:
hello world
lin xiao qin, hold on
读文件:
f = open(‘test.txt’)
content = f.readlines()
[‘hello world\n’, ‘\n’, ‘lin xiao qin, hold on\n’, ‘\n’]
print(content)
关闭文件
f.close()
3.4.2、readline()
readline()一次读取一行的内容
f = open(‘test.txt’)
content = f.readline()
print(f’第一行:{content}')
content = f.readline()
print(f’第二行:{content}')
关闭文件
f.close()
‘’’
第一行:hello world
第二行:
第三行:lin xiao qin, hold on
‘’’
3.4.3、seek()
作用:用来移动文件指针
文件对象.seek(偏移量,起始位置)
起始位置:
-
0:文件开头
-
1:当前位置
-
2:文件结尾
文件对象.close()
⽤户输⼊当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt)。
1.接收用户输入的目标文件名
old_name = input(‘请输⼊您要备份的⽂件名:’)
2.1提取文件后缀点的下标
index = old_name.rfind(‘.’)
print(index) # 返回后缀中.的下标号
print(old_name[:index]) # 源⽂件名(⽆后缀)
2.2组织新文件名 旧文件名 + [备份] + 后缀
new_name = old_name[:index] + ‘[备份]’ + old_name[index:]
打印新⽂件名(带后缀)
print(new_name)
3.6.1、备份文件写入数据
-
打开源文件和备份文件
-
将源文件数据写入备份文件
-
关闭文件
1.打开文件
old_f = open(old_name,‘rb’)
new_f = open(new_name,‘wb’)
2.将源文件数据写入备份文件
while True:
con = old_f.read(1024)
if len(con) == 0:
break
new_f.write(con)
3.关闭文件
old_f.close()
new_f.close()
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!