参数类型与匿名函数

Python第四阶段

函数的参数和返回值的类型

动态语言与静态语言

  • 静态编程语言:变量类型在编译过程中被检查的是静态编程语言
  • 动态编程语言:变量类型在运行过程中不被检查的是动态编程语言

动态语言与静态语言

类型指定和检查

python是动态语言,新建变量时不需要声明与指定类型。自定义函数时也是如此。但是,在python3.5之后,就新增了对函数参数和返回值的类型指定和检查,以及在新建变量时也可以指定类型。

def f(a:int,b:str)-> str:
    c=a*b
    print(c)
    return f

f(3,'zhongguo!')

类型指定和检查

指定了输入参数a为int类型,而b为str类型,并且返回值为srt类型。可以看到,在方法中,最终返回了一个str。当我们在调用这个函数时,但如果参数a输入的是字符串,实际上运行不会报错,毕竟python的本质还是动态语言。

def f(a:int,b:str)-> str:
    c=a*b
    print(c)
    return f

f(3,'zhongguo!')

匿名函数lambda

匿名函数lambda

所谓的匿名函数(anonymous function)是指一个没有名称的函数,Python是使用def定义一般函数,匿名函数则是使用lambda来定义,有的人称之为lambda表达式,也可以将匿名函数称lambda函数。通常会将匿名函数与Python的内置函数filter( )、map( )等共同使用,此时匿名函数将只是这些函数的参数。

匿名函数lambda的基本语法

arg:匿名函数的参数

expression:函数内部需要执行的表达式

lambda arg1[, arg2, …, argn]:expression

匿名函数lambda的基本语法

返回x的平均值

square = lambda x:x ** 2

print(square(10))

匿名函数lambda的基本语法

匿名函数有多个参数的应用

product = lambda x,y : x * y

print(product(5,10))

匿名函数使用与filter()

练习:请编写一个函数,参数为一个列表,筛选出这个列表当中所有的奇数,然后将它们组合成一个新的列表

答案

mylist = [5,10,15,20,25,30]

def oddfn(mylist):
  result = []
  for item in mylist:
    if item % 2 == 1:
      result.append(item)
  return result

匿名函数一般是用在不需要函数名称的场合,例如,一些高阶函数(higher-order function)的参数可能是函数,这时就很适合使用匿名函数,同时让程序变得更简洁。有一个内置函数filter( ),它的语法格式如下:

匿名函数使用与filter()

filter(function, iterable)

上述函数将依次对iterable(可以重复执行,例如,字符串string、列表list或元组tuple)的元素(item)放入function(item)内,然后将function( )函数执行结果是True的元素(item)组成新的筛选对象(filter object)返回。

匿名函数使用与filter()

filter(function, iterable)

使用传统函数将奇数的元素筛选出来

def oddfn(x):
  if x % 2 == 1:
    return True
  else:
    return False

mylist = [5,10,15,20,25,30]
filter_object = filter(oddfn,mylist)

print("奇数列表:",list(filter_object))

使用匿名函数完成程序

mylist = [5,10,15,20,25,30]
filter_object = filter(lambda x: x % 2 == 1 ,mylist)
print("奇数列表:",list(filter_object))

编写一个程序,计算1-1000所有的能够被4整除的数据,并将它们组合成一个列表

答案

print(list(filter(lambda x: x % 4 == 0,range(1,1001))))

练习:编写一个程序,计算1900-2000的所有闰年

答案

print(list(filter(lambda x:(x % 4 == 0 and x % 100 != 0) or x % 400 == 0,range(1900,2001))))

公历年份是4的倍数,且不是100的倍数,为普通闰年。公历年份是整百数,且必须是400的倍数才是世纪闰年。

匿名函数使用map()

  • function表示一个函数
  • iterable表示一个可迭代器
map(function,iterable)

匿名函数使用map()

上述函数将依次对iterable(可以重复执行,例如,字符串string、列表list或元组tuple)的元素(item)放入function(item)内,然后将function( )函数执行结果组成新的筛选对象(filter object)返回。

map(function,iterable)

匿名函数使用map()

使用匿名函数对列表元素进行计算平方

mylist = [5,10,15,20,25,30]

squarelist = list(map(lambda x: x **2,mylist))

print(squarelist)

练习:编写一个函数,给出15个同学的成绩,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示,将结果组合成一个列表

答案

def judge(x):
    if x >= 90:
        return 'A'
    if x >= 60:
        return 'B'
    else:
        return 'C'

score = [67,90,78,56,90,67,98,78,65,87,96,85,84,93,40]
print(list(map(judge,score)))

利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示

答案

x = int(input())
print((lambda x:(x >= 90 and 'A' or x >= 60 and 'B' or 'C'))(x))

综合练习

编写一个函数,找出一个整数的所有因子,并组合成列表返回

 

例如:6的因子有1  2  3

答案

def factor(number):
    result = []
    for  i in range(1,number):
        if number % i == 0:
            result.append(i)
    return result

number = int(input())
print(factor(number))

请尝试将上面的例子使用lambda表达式来完成

答案

number = int(input())
print(list(filter(lambda x:number % x == 0,range(1,number))))

参数类型与匿名函数

By yang he

参数类型与匿名函数

  • 164