这里来给大家演示一下,函数的定义或构造,并调用函数来实现封装后的效果.
首先我们来看看想实现下面的这个效果,如果不使用函数应该怎么实现.
以上两种方法,第一种代码重复率太高,代码美观效果太差,虽然能实现效果,但是因为数量比较少,还能手工打出来这几行代码,如果是打印1-100000就很难实现了.这时候for循环还是可以实现的,但是for循环只能实现类似的数字和变量循环,无法进行复杂的功能开发.鉴于此,函数这个概念就被python引入了,下面先来看看函数是怎么实现上面的效果的,还是两种方法.
这时候如果想实现上面的打印结果就直接使用函数名+小括号调用函数就可以了,这种类型的语法,不仅可以反复使用,而且封装后的代码更美观.
案例一:给你一个字符串,s = 'hello kitty'
①1 输出函数:print(s.capitalize())
①.、函数定义
①使用def关键字定义函数
②
"""文档字符串,docstring,用来说明函数的作用"""
#函数体
return 表达式
注释的作用:说明函数是做什么的,函数有什么功能.
③遇到冒号要缩进,冒号后面所有的缩进的代码块构成了函数体,描述了函数是做什么的,即函数的功能是什么.Python函数的本质与数学中的函数的本质是一致的.
①函数必须先定义,才能调用,否则会报错.
③不要在定义函数的时候在函数体里面调用本身,否则会出不来,陷入循环调用.
④函数需要调用函数体才会被执行,单纯的只是定义函数是不会被执行的.
⑤Debug工具中Step into进入到调用的函数里,Step Into My Code进入到调用的模块里函数.
map() 函数接受两个参数,一个是函数,一个是可迭代对象(Iterable), map 将传入的函数依次作用到可迭代对象的每一个元素,并把结果作为迭代器(Iterator)返回.
运用简单的循环可以实现:
运用高阶函数 map() :
结果 r 是一个迭代器,迭代器是惰性序列,通过 list() 函数让它把整个序列都计算出来并返回一个 list .
如果要把这个list所有数字转为字符串利用 map() 就简单了:
小练习:利用 map() 函数,把用户输入的不规范的英文名字变为首字母大写其他小写的规范名字.输入 ['adam', 'LISA', 'barT'] ,输出 ['Adam', 'Lisa', 'Bart']
reduce() 函数也是接受两个参数,一个是函数,一个是可迭代对象, reduce 将传入的函数作用到可迭代对象的每个元素的结果做累计计算.然后将最终结果返回.
小练习:编写一个 prod() 函数,可以接受一个 list 并利用 reduce 求积:
filter() 函数用于过滤序列, filter() 也接受一个函数和一个序列, filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素.
举例说明,删除list中的偶数:
小练习:用 filter() 求素数
定义一个筛选函数:
定义一个生成器不断返回下一个素数:
打印100以内素数:
python内置的 sorted() 函数可以对list进行排序:
sorted() 函数也是一个高阶函数,还可以接受一个 key 函数来实现自定义排序:
key 指定的函数将作用于list的每一个元素上,并根据 key 函数返回的结果进行排序.
默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' 'a',结果,大写字母Z会排在小写字母a的前面.如果想忽略大小写可都转换成小写来比较:
要进行反向排序,不必改动key函数,可以传入第三个参数 reverse=True :
运用匿名函数更简洁:
def 函数名():? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?函数体? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?return? 返回值? ? ? ? ? ? ? ? ? ? ? ? ? ?
def 函数名(非可选参数,可选参数):
?函数体?
??return 返回值
def 函数名(参数,*b):
? ? ? 函数体
? ? ? return 返回值
函数名 = lambda 参数 : 表达式
例1:f = lambda x , y? :? x + y? ? ? ? ? ? ? ? ? ? ? ?
调用:?print(f())? ? 输出: 没有参数的lambda函数!
print()函数用于打印输出,是python中最常见的一个内置函数.
print()函数的语法如下:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False).
所有非关键字参数都会被转换为字符串,就像是执行了str()一样,并会被写入到流,以"sep参数"且在末尾加上"end参数"."sep参数"和"end参数"都必须为字符串;它们也可以为"None",这意味着使用默认值.如果没有给出"objects参数",则print()将只写入"end参数".
ython print()函数:
print()方法用于打印输出,最常见的一个函数.