Python函数--与javac的不同点

Python函数--与javac的不同点,第1张

Python函数--与java/c的不同点

目录

一、函数的定义与使用

1. 函数的定义2.函数的调用(与其他语言一样) 二、参数列表

1.传参or传地址2.形参、实参(与几乎其他语言一样)


一、函数的定义与使用

函数必须先定义才能调用

1. 函数的定义

语法:
def 函数名 (参数列表):
----函数体
----[return 返回值]

注意:

    缩进return结束函数,默认返回为None;可以返回多个值,用逗号分隔开即可;若返回多个值,其实返回的是一个元组
2.函数的调用(与其他语言一样)

必须确保函数名调用函数之前,必须保证Python已经知道函数的存在

二、参数列表 1.传参or传地址

与其他语言不同,python有一个默认规则:

当参数为列表、对象、字典等(可变对象的引用),传的是地址!
当参数为字符串、数字和元组(不变对象的引用),传的是值

传值示例
 def  a(n):  #定义了一个带有参数的函数
      n += 100 #主要实现 +100的 *** 作并输出n的值
      print(n) 
an=5  #现有一个变量
print(an)
a(an)
print(an)
#运行结果:
 5   105   5

在上例中,定义了一个带有参数的函数a(n),函数体内,实现n+100的 *** 作并打印输出,定义一个变量an=5 ,然后执行如下 *** 作:1、打印输出an;2、用an做为实参调用a(n)函数,3、再打印输出an的值,运行后结果为: 5 105 5,变量an的值在参与函数运算前后没有发生变化。

传地址示例
def   b(n): #定义了一个带有参数的函数b
    n[2] = 300
    print(n)
bn = [1,5,6,5,7,9] #长度为6的列表
print(bn)
b(bn)
print(bn)
#运行结果
[1, 5, 6, 5, 7, 9]
[1, 5, 300, 5, 7, 9]
[1, 5, 300, 5, 7, 9]

在上例中,定义了一个带有参数的函数b(n),函数体内,定义了一个列表且列表的第3个元素的值为300,最后打印输出n的值。定义了一个长度为6的列表bn,然后执行如下 *** 作:1、打印输出列表bn的值;2、用bn做为实参调用函数b(n),3、再打印输出列表bn的值,运行后结果为: [1, 5, 6, 5, 7, 9]
[1, 5, 300, 5, 7, 9],[1, 5, 300, 5, 7, 9],从以上 *** 作中可以看出,列表bn在做为实参参与函数b(n)的运算之后,自身的值发生了变化

2.形参、实参(与几乎其他语言一样)

不同点:

    位置参数:

    按位置进行参数的传递

    默认参数:

    如果在函数定义时,参数中的某个形参有值,则称这个参数为默认参数

     def  addFive(a, b=5): #定义了一个带有默认参数的函数
        sum=a+b    #在函数体内计算a+5
        print(sum)
     addFive(6)#输出11
     addFive(6,7)#输出13
    

    注意事项:

    1)所有默认参数必须放在放在非默认参数之后;
    2)虽然在定义时给默认参数指定了值,但在函数调用时仍可以为它传入其它的值(新值将会覆盖旧值)

    关键字参数

    我们使用命名(关键字)而非位置(一直以来我们所使用的方式)来指定函数中的参数

    我们不再需要考虑参数的顺序,函数的使用将更加容易。
    我们可以只对那些我们希望赋予的参数以赋值,只要其它的参数都具有默认参数值。

    def func(a, b=5, c=10):
        print('a is', a, 'and b is', b, 'and c is', c)
    func(3, 7)
    func(25, c=24)
    func(c=50, a=100)
    
    输出:
    a is 3 and b is 7 and c is 10 
    a is 25 and b is 5 and c is 24 
    a is 100 and b is 5 and c is 50
    

    名为 func 的函数有一个没有默认参数值的参数,后跟两个各自带有默认参数值的参数。
    在第一次调用python函数时,func(3, 7),参数 a 获得了值 3,参数 b 获得了值 7,而 c 获得了默认参数值 10。
    在第二次调用函数时,func(25, c=24),由于其所处的位置,变量 a 首先获得了值 25。然后,由于命名——即关键字参数——指定,变量 c 获得了值 24。变量 b 获得默认参数值 5。
    在第三次调用函数时,func(c=50, a=100),我们全部使用关键字参数来指定值。在这里要注意到,尽管 a 在 c 之前定义,但我们还是在变量 a 之前指定了变量 c。

    不定长参数
    函数的形参还可以接收不定个数的实参,即用户可以给函数提供可变长度的参数,这就是不定长参数,可以通过在形参前面使用*来实现

    求一个学生所有课程的平均成绩。
    	分析:
    	这个函数仍然是求平均成绩的,但是题中没有给出课程数的具体值,所以每门课的成绩也是不确定的,针对这种情况,该如何处理呢?可以用可变参数来处理。
    	用a表示课程的门数,*b是可变参数,代表a门课程的成绩。
    	
    avgScore(a, *b)函数中,形参a表示有a门课程,*b就是a门课程的成绩,在函数体内部,用for循环语句逐一读取每门课的成绩,然后对成绩求和、求平均值,最后打印输出
    
    	def  avgScore(a, *b): 
    	    sum = 0   
    	    for  item in b:
    	    sum = sum + item 
    	    avg = sum / a  
    	    print(‘平均成绩为:' + str(avg)) 
    

    拆分参数列表
    如果一个函数所需要的参数存储在列表、元组或字典中,就可以直接从列表、元组或字典中拆分出函数所需要的参数,其中列表、元组拆分出来的结果作为位置参数,而字典拆分出来的结果作为关键字参数

    def  SumVal(*args):#定义函数SumVal
           sum = 0
           for i in args:
                sum+=I
           print(‘求和结果是’,sum)
    ls = [3,5.2,7,1]
    SumVal(*ls)
    
    def StudentInfo(name,chineeselevel,country) #定义函数StudentInfo
          print(‘姓名:%s,中文水平:%s,国家:%s’%(name,chineselevel,country))
    d={‘country’:‘中国’,‘chineselevel’:‘良好’,‘name’:‘李晓明’}
    StudentInfo(**d)
    

    参数的传递有以下几种情况:按“位置传递”与按“名称传递”
    在调用的时候,我们发现一下两种方式都是可以的,
    1) 按位置传递
    avgScore(90,85,79)
    成绩高于平均分;
    2)按名称传递
    avgScore(c=79,a=90,b=85)
    成绩高于平均分;
    当使用第一种调用方式时,是对照参数的位置来进行传递,使用第二种方式调用的时候,直接用参数名来进行传递,这两种传递方式的运行结果是一样的 。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存