zoukankan      html  css  js  c++  java
  • Python3学习笔记12-定义函数及调用

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段,能提高应用的模块性,和代码的重复利用率

    Python提供了许多内建函数,比如print()。也可以自己创建函数,这被叫做用户自定义函数。

    定义一个函数

    函数代码以def开头,后接着函数名和圆括号()

    传入的参数和自变量必须放在圆括号中间,圆括号中可以定义参数

    函数的第一行语句可以使用字符串来当做函数的文字说明

    函数的内容以冒号开始,并且缩进

    return【表达式】结果函数,并返回一个值给调用方,如果没有加return,默认返回None

    实例

    def my_abs(x):
        '求绝对值'
        if x >= 0:
            return  x
        else:
            return -x

    函数调用

    在调用函数的时候,需要知道函数的名称和参数

    print(my_abs(-3))

    Python内置了很多有用的函数,我们可以直接调用,比如求绝对值的函数abs,只有一个参数

    print(abs(-1))

    函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:

    a = abs  #变量a指向abs函数
    print(a(-2))  #通过a调用abs函数



    在调用函数的时候,如果传入的参数数量不正确,会报TypeError的错误,并会给出提示。abs只能给一个参数,但给了两个

    print(abs(-1,-2))

    如果给的参数类型不对,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型

    print(abs('ss'))


    参数检查

    调用函数时,如果参数个数不对,python解释器会自动检测出来,并抛出TypeError.

    但是如果参数类型错误了,Python的解释器就无法帮忙检测出来

    my_abs('1')

    使用自己定义的my_abs传入不恰当的参数时,导致if语句出错,所以出错的信息提示和内置的abs提示不一致

    数据类型检查可以用内置函数isinstance()实现:

    def my_abs(x):
        if not isinstance(x,(int,float)):
            raise TypeError('bad operand type')
        if x >= 0:
            return x
        else:
            return -x
    my_abs('1')



    返回多个值

    函数可以返回多个值   计算平方根可以调用math.sqrt()函数

    定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:ax2 + bx + c = 0的两个解

    import math
    def quadratic(a,b,c):
        d = b**2-4*a*c
        if d < 0 :
            return print("次方程无解")
        x1 = (-b+math.sqrt(d))/(2*a)
        x2 = (-b-math.sqrt(d))/(2*a)
        return x1,x2
    a,b = quadratic(2, 3, 1)
    print(a,b)

    看着是返回了两个值a和b,但是其实Python函数返回的仍然是单一值

    r = quadratic(2, 3, 1)
    print(r)

    返回值是一个tuple!但是在语法上返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,

    按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

    参数传递

    在Python中,类型属于对象,变量是没有类型的

    a = [1,2,3]

    a = "Runoob"

    以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。


    可更改(mutable)与不可更改(immutable)对象

    在Python中,string,tuples和numbers是不可更改的对象,而list,dict等是可以修改的对象

    不可修改类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a

    可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

    python 函数的参数传递:

    '''不可变类型:当传递的参数是整数、字符串、元祖等不可变对象时候,如fun(a)传递的只是a的值,并没有影响a对象本身,比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身

    可变类型:如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响'''

    python 传不可变对象实例

    def ChangeInt(a):
        a = 10
    b = 2
    ChangeInt(b)
    print(b)


    实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它

    传可变对象实例

    def Changeme(mylist):
        mylist.append([1,2,3,4])
        print("函数内取值: ",mylist)
        return
    c = [10,20,30]
    Changeme(c)
    print("函数外取值: ", c)


    可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了

  • 相关阅读:
    Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源
    Spring Boot 如何给微信公众号返回消息
    Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
    Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置
    Spring Boot 开发微信公众号后台
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    Spring Boot2 系列教程(十六)定时任务的两种实现方式
    Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
    Spring Boot2 系列教程(十四)CORS 解决跨域问题
    JavaScript二维数组
  • 原文地址:https://www.cnblogs.com/myal/p/9337419.html
Copyright © 2011-2022 走看看