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)


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

  • 相关阅读:
    java时间戳与Date相互转换、日期格式化、给日期加上指定时长、判断两时间点是否为同一天
    notepad++去掉红色波浪线
    发生异常Address already in use: bind
    SecureCRT背景颜色
    linux查看实时日志命令
    idel上传代码到github时遇到的Push rejected: Push to origin/master was rejected
    git解决error: The following untracked working tree files would be overwritten by checkout
    使用SecureCRT工具上传、下载文件的两种方法
    Windows下Zookeeper启动zkServer.cmd闪退问题的解决方案
    Maven的Snapshot版本与Release版本
  • 原文地址:https://www.cnblogs.com/myal/p/9337419.html
Copyright © 2011-2022 走看看