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


一、函数的定义与使用

函数必须先定义才能调用

1. 函数的定义

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

注意:

  1. 缩进
  2. return结束函数,默认返回为None;
  3. 可以返回多个值,用逗号分隔开即可;若返回多个值,其实返回的是一个元组

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.形参、实参(与几乎其他语言一样)

不同点:

  1. 位置参数:

    按位置进行参数的传递

  2. 默认参数:

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

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

    注意事项:

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

  3. 关键字参数

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

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

    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。

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

    求一个学生所有课程的平均成绩。
    	分析:
    	这个函数仍然是求平均成绩的,但是题中没有给出课程数的具体值,所以每门课的成绩也是不确定的,针对这种情况,该如何处理呢?可以用可变参数来处理。
    	用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)) 
    
  5. 拆分参数列表
    如果一个函数所需要的参数存储在列表、元组或字典中,就可以直接从列表、元组或字典中拆分出函数所需要的参数,其中列表、元组拆分出来的结果作为位置参数,而字典拆分出来的结果作为关键字参数

    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)
    成绩高于平均分;
    当使用第一种调用方式时,是对照参数的位置来进行传递,使用第二种方式调用的时候,直接用参数名来进行传递,这两种传递方式的运行结果是一样的 。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaPython在创建对象方面有一些相同点,也有一些不同点。 相同点: 1. 使用关键字创建对象:在Java中使用关键字 "new",而在Python中使用关键字 "class"。 2. 实例化对象:无论是Java还是Python,都需要通过实例化来创建对象。在Java中,使用类的构造函数来实例化对象;在Python中,使用类的初始化方法 "__init__" 来实例化对象。 3. 对象属性和方法:在JavaPython中都可以为对象定义属性和方法。 不同点: 1. 类的定义方式:在Java中,类的定义通常是以类名、成员变量和成员方法的形式进行;而在Python中,类的定义通常是以 "class" 关键字、属性和方法的形式进行。 2. 数据类型声明:Java是一种静态类型语言,需要在定义对象时显式声明变量的数据类型;而Python是一种动态类型语言,不需要声明变量的数据类型。 3. 构造函数:在Java中,构造函数与类名相同,并且可以有多个重载形式;而在Python中,构造函数是类的初始化方法 "__init__",只能有一个。 4. 继承机制:Java支持单继承和多实现,即一个类只能继承自一个父类,但可以实现多个接口;Python支持多继承,即一个类可以同时继承自多个父类。 5. 销毁对象:在Java中,对象的销毁由垃圾回收机制自动处理;而在Python中,对象的销毁由解释器通过引用计数机制和垃圾回收机制共同处理。 这些是JavaPython在创建对象方面的一些相同与不同之处。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值