Python编程高阶函数的应用(一)

#!/usr/bin/env python
# coding: utf-8

lambda表达式

# 又被称之为匿名函数
# 
# 格式  lambda 参数列表: 函数体
# 

# In[1]:


def add(x, y):
    return x + y
print(add(3, 4))


# In[3]:


# 简单的函数采用这个
add_lambda = lambda x, y : x + y
add_lambda(3, 4)

三元运算符

# In[4]:


condition = True
print(1 if condition else 2)


# In[5]:


condition = False
print(1 if condition else 2)

map函数的应用

# In[8]:


list1 = [1, 2, 3, 4, 5]
r = map(lambda x : x + x, list1)
print(list(r))


# In[10]:


m1 = map(lambda x, y: x * x + y, [1,2,3,4,5], [1,2,3,4,1])
print(list(m1))

filter 过滤器

# In[16]:


def is_not_none(s):
    return s and len(s.strip()) > 0
list2 = {' ', '', 'hello', 'greedy', None, 'ai'}
result = filter(is_not_none, list2)
print(list(result))

reduce 函数

# In[19]:


from functools import reduce
f = lambda x, y: x + y
r = reduce(f, [1, 2, 3, 4, 5], 10)
print(r)

列表推导式

根据已有的列表推导出新的列表
# In[26]:


list1 = [1, 2, 3, 4, 5, 6]
f = map(lambda x: x+x, list1)
print(list(f))

list2 = [i + i for i in list1]
print(list2)

list3 = [i**3 for i in list1]
print(list3)

# 有选择性的筛选
list4 = [i*i for i in list1 if i > 3]
print(list4)
集合推导式
# In[28]:


list1 = {1, 2, 3, 4, 5, 6}

list2 = {i + i for i in list1}
print(list2)

list3 = {i**3 for i in list1}
print(list3)

# 有选择性的筛选
list4 = {i*i for i in list1 if i > 3}
print(list4)
字典推导式
# In[36]:


s = {
    '张三': 20,
    '李四': 15, 
    '王五': 31
}

# 拿出所有的key,变成列表
s_key = [key + 'aaa' for key, value in s.items()]
print(s_key)

# key 和 value 颠倒
s1 = {value: key for key, value in s.items()}
print(s1)

# 只拿出符号条件的值
s2 = {key: value for key, value in s.items() if key == '李四'}
print(s2)

闭包:一个返回值是函数的函数

# In[39]:


# 调用后打印当前的时间
import time
def runtime():
    def now_time():
        print(time.time())
    return now_time

f = runtime()
# f()


# In[40]:


f()


# In[58]:


get_ipython().system('type data.csv')


# In[60]:


# 读出一个文件中带有某个关键字的行
def make_filter(keep):          # keep = 8
    def the_filter(file_name):  # file_name = data_csv 这个文件
        file = open(file_name)  # 打开文件
        lines = file.readlines() # 读取出来所有的文件内容
        file.close()            # 关闭文件
        filter_doc = [i for i in lines if keep in i]  # 过滤文件内容
        return filter_doc
    return the_filter

filter1 = make_filter('c') # 这一行调用了make_filter函数,接受了the_filter函数作为返回值
# 也就是说这里的filter1 就等于函数 the_filter

filter_result = filter1('data.csv')
print(filter_result)
        

装饰器/语法糖/注解

# In[64]:


# 获取函数的运行时间
import time

def runtime(func):
    def get_time():
        func()
        print(time.time())
    return get_time
    
    
@runtime
def student_run():
    print('学生跑!')

student_run()
如果函数有参数怎么解决——有参数的装饰器
# In[81]:


def runtime(func):
    def get_time(*args):
        func(*args)
        print(time.time())
    return get_time
    
    
@runtime
def student_run(i, j):
    print('学生跑!')
    
    
@runtime
def student_run1(i):
    print('学生1跑!')
    


student_run(1, 2)
student_run1(1)

# 关键字参数 key = value
关键字参数问题
def runtime(func):
    def get_time(*args, **kwargs):    #依次解决多参数,关键字参数问题
        func(*args, **kwargs)
        print(time.time())
    return get_time
    
    
@runtime
def student_run(i, j):
    print('学生跑!')
    
    
@runtime
def student_run1(*args, **kwargs):
    print('学生1跑!')
    
@runtime
def student_run2():
    print('学生2跑!')

student_run(1, 2)
student_run1(5, 3, i = 1, j = 2)
student_run2()

# 关键字参数 key = value

作业:开发一个语法糖,实现参数的类型准确性.

在python中,大家都知道python的数据类型是弱类型,比如说函数只允许传字符串

关键字参数问题,小作业的解答

def runtime(func):
    def get_time(*args, **kwargs):    #依次解决多参数,关键字参数问题
        for i in args:
            if not isinstance(i, str):
                print('NO!!')

        print(type(kwargs))
        
        for i, j in kwargs.items():
            if not isinstance(j, str):
                print('NO!!')
                
        func(*args, **kwargs)
        print(time.time())
    return get_time
    
    
@runtime
def student_run(i, j):
    print('学生跑!')
    
    
@runtime
def student_run1(*args, **kwargs):
#     if not(type(args)== str and type(kwargs) == str):
#         exit('NO!')
    print('学生1跑!')
    
@runtime
def student_run2():
    print('学生2跑!')

student_run(1, 2)
student_run1(5, 3, i = 1, j = 2)
student_run2()

# 关键字参数 key = value
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值