Python学习笔记之函数单元

Python学习笔记:函数单元

在Python中,利用函数可以去解决一些复杂的任务,同时也可以将繁琐的代码简单化。
python中的函数类似于C++中的函数。
具体如下:

1.创建函数及函数的帮助信息

可以在定义函数后,再加上一句功能说明。
功能说明内容凡在三个双引号里,即如下代码收纳柜的绿色部分。
查看函数的功能说明时,无须打开这个函数,只需运行函数名.__doc__即可。

#定义一个实现累加功能的函数
def sum_ln(n):
    """该函数的参数为自然数n,其功能为累加从1到n的n个连续自然数"""
    #定义一个存放累加数的变量
    j=0
    #使用range(1,n+1)生成从1到n的n个连续自然数
    for i in range(1,n+1):
        j+=i
    return j           
print(sum_ln(5))    ##结果为15
print(sum_ln.__doc__)  ##查看函数的帮助信息(说明)  使用函数名.__doc__

定义函数时要注意一下几点。
1.定义函数的关键时def语句。
2.def空格后是函数名称,函数的命名规则与变量一样。
3.函数名后紧跟着一堆小括号,小括号后面是冒号。
4.冒号下面的语句统一缩进4格。
5.用return语句返回这个函数的执行结果。
6.用print语句进行调用和输出。

2.传递参数

参数分为形参与实参。
定义函数时,在括号里指明的参数 ,如sum_ln(n)中的n,这类参数称为形式参数,即形参。
调用函数或执行函数时,函数括号里的参数,如print(sum_ln(100))中的100,就是实际参数,即实参。

1.位置参数
位置参数就是定义函数时与参数位置有关的参数,调用函数时,位置参数必须与定义函数时的顺序保持一致。
代码如下:

#位置参数
#定义一个函数,累加自然数m至n之间所有的自然数
def sum2(m,n):
    """该函数的参数为自然数m、n,其功能为累加从m到n的所有自然数"""
    return sum(range(m,n+1))      ##直接调用sum函数求解
print(sum2(1,10))                 ##需要使用print来打印并调用函数进行求解

结果:#累加1到10的所有自然数 输出得到55
其中1,10就是位置实参。
位置实参的顺序很重要,如果顺序不正确,可能报错或出现异常情况。
2.关键字参数
位置参数多了,记住各参数的位置和顺序将非常麻烦,而且还很容易出错。为改进这种纯粹依据位置来传递参数的方式,人们想到了定义函数时,用一些代表一定含义的单词(或关键字)来命名参数,然后将这些单词(或关键字)赋给对应值即可,无须考虑这些参数的位置或顺序,这样就很方便。
具体代码如下:

#关键字参数
##定义一个函数,累加start至自然数end之间的所有自然数
def sum3(start,end):
    """该函数的参数为自然数start、end,其功能为累加从start到end的所有自然数"""
    return sum(range(start,end+1))   ##关键字start和end
print(sum3(start=1,end=10))          ##55

3.返回值

在python中,在函数体内用return语句来为函数指定返回值,返回值可以是一个或多个,且可以是任何类型。如果没有return语句,则返回None值,即返回控制。
注:不管return语句在函数的什么位置,执行完return语句后,都会立即结束函数的执行。

##返回值
#返回一个值的情况如上种种

#返回多个值:
def sum4(start,end):
    """该函数的参数为自然数start、end,其功能为累加从start到end之间的所有自然数及偶数之和"""
    return sum(range(start,end+1)),sum([i for i in range(start,end+1) if(i%2==0)])
sum4(start=10,end=100)                 ##函数调用
##把返回值分别赋给两个变量
a,b=sum4(start=10,end=100)             ##函数调用
print("返回所有数之和:{},偶数之和:{}".format(a,b))

#返回空值 在函数体中不适用return语句,不过可以用print语句把结果显示出来
def sum5(end,start=1):
    """该函数的参数为自然数start、end,其功能为累加从start到end的所有自然数"""
    print("累加结果:",sum(range(start,end+1)))
a=sum5(10)              ##函数调用,输出结果
print(type(a))          ##查看类型

4.传递任意数量的参数

Python还支持列表或元组参数。
即用列表或元组作为实参传入函数,例如一下代码:

##传递任意数量的参数
def func1(lst):
    sum=0
    for i in lst:
        sum+=i
    return sum
#实参以列表格式进行传入
print(func1([1,2,3,4,5,6]))    ##函数调用     21
#实参以元组格式传入 
print(func1((-1,1,2,3,4,5)))     ## 14

1.传递任意数量的实参:
要实现输入任意数量的实参,只要在形参前加一个即可。
比如将前面的(lst)修改为(lst)。形参加上后,在函数内部,参数
lst接收到的是一个元组,因此函数代码完全不变。但是调用该函数时,可以传入任意个参数,包括0个参数,示例代码如下:

#传递任意数量的实参
#要实现输入任意数量的实参,只要在形参前加一个*即可  再函数内部,*lst接收到的是一个元组
def func2(*lst):
    sum=0
    for i in lst:
        sum+=i
    return sum
print(func2(-1,-2,-3,-4,-5,-6,100))         #调用函数    79

2.传递位置参数及任意数量的实参
位置参数可以和支持任意数量的实参一起使用,不过如果遇到不同类型的实参,必须在定义函数时,将接纳任意数量的实参放在最后。Python优先匹配位置实参和关键字实参,然后再将剩下的实参归到最后的实参里,如下列代码:

#传递位置参数及任意数量的实参
#定义一个函数,size为位置参数、numb为任意数量参数
def func3(size,*numb):
    """打印任意参数的和,在结果前放置size个-符号"""
    sum=0
    for i in numb:
        sum+=i
    print('-'*size+"输出结果为:"+str(sum))
func3(5,1,2,3,4,5)             ##第一个5代表size   该函数无返回值,所以不用使用print
##输出结果:-----输出结果为:15

3.传递任务数量的关键字实参
Python支持采用关键字实参,而且也可以是任意数量,只要在定义函数时在对应的形参前加上两个*即可。
对应的形参在函数内部将以字典的方式存储,调用函数需要采用arg1=value1,arg2=value2的形式。
此外,有时会出现有多种类型参数的情况,如既有位置形参,又有表示任意数量的一般形参和任意数量的关键字形参的函数。
如格式为customer(fargs,args,**kwargs)的函数,其中args与**kwargs都是Python中的可变参数,*args表示可传入任意多个无名实参,**kwargs表示可传入任意任意多个关键字实参,它本质上是一个dict,示例如下:

#传递任务数量的关键字实参   定义时在对应的形参前加上**即可  对应的形参在函数内部将以字典方式存储
#调用函数需要采用 arg1=value1,arg2=value2的形式
##若出现多种类型参数的情况,如既有位置形参,又有一般形参和任意数量形参。
#如格式为customer(fargs,*args,**kwargs)的函数,其中*args与**kwargs都为可变参数
##*args表示可传入任意多个无名实参,**kwargs表示可传入任意多个关键字实参  其本质上是一个dict
def customer(name,*subj_score,**user_info):
    print("{}".format(name),end=",")
    print("各科成绩{}".format(subj_score),end=",")
    print("身份信息:{}".format(user_info),end=",")
#调用
customer("刘易行",100,100,100,height=180,weight=80,age=18)
##刘易行,各科成绩(100, 100, 100),身份信息:{'height': 180, 'weight': 80, 'age': 18},

5.lambda函数

lambda函数又称匿名函数,使用lambda函数可以返回一个运算结果
格式: result=lambda[arg1[arg2,…,]]:express
说明:1:result就是表达式express的结果。
2:关键字lambda时必需的。
3:参数可以是一个,也可以时多个,多个参数以逗号分隔。
4:lambda是一行函数,参数后需要一个冒号。
5:express只能有一个表达式,无须return语句,表达式本身的结果就是其返回值。
lambda函数分厂简介,它通常作为参数传递给函数,代码示例如下:

#定义一个常规函数
def  func1(a,b,c):
    return a+b+c
print(func1(1,2,3))    ##    6

#用lambda函数实现
result=lambda a,b,c:a+b+c
print(result(1,2,3))

#可以把lambda函数作为参数传递给其他函数,如下:
lst1=["python","pytorch","keras","tensorflow"]
#将列表中的元素按照元素长度来进行排序
print(sorted(lst1,key=lambda x:len(x)))    ##   6
#['keras', 'python', 'pytorch', 'tensorflow']

6.生成器函数

前面介绍了函数的返回值可以是一个或多个,但如果返回百万个甚至更多值,将消耗很大一部分资源,为解决这一问题,人们想到使用生成器函数。
代码示例如下:

#生成器函数
#具体方法:把函数中的return换成yield语句
def gen1(n):
    for i in range(n):
        yield i
#遍历生成器gen1
#方法一:使用for循环遍历生成器
for i in gen1(10):
    print(i,end=" ")
print()
#方法二:使用next函数逐个遍历生成器
gen=gen1(10)
while True:
    try:   ##因为不停调用next会报一场,所以要捕捉处理异常
        x=next(gen)
##注意这里不能直接写next(gen1(10)),否则每次都是重复调用1
        print(x,end=" ")
    except StopIteration as e:
        break

7.导入模块

本人为人工智能专业,最近正在入门机器学习相关知识,所以此处展示导入已经安装好的TensorFlow,并查看版本。
本人机型为联想拯救者,后期可能会发布一些如何配置环境的文章,敬请关注。
具体代码如下:

#导入模块
#就是import+对应的模块名称。
import tensorflow as tf
print(tf.__version__)       ##2.0.0

千里之行,始于足下!

Cause’ sometimes things will bend you
因为有时 困难让你折服
But trust me you’ll be fine
但相信我 剧情总会好转
I’ve been moving mountains that I once had to climb
我一直在试图撼动着 我曾要攀登的巍然山峦
And life’s not out to get you
人生何处不青山
Despite the things you’ve been through
尽管你一路走来都是刀山火海
Because what you give is what you get
但你的付出与回报终成正比
And it doesn’t make sense to make do
为此 一味的退让已然毫无意义
–Gold Steps from Neck Deep

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值