• Python基础笔记:函数:调用函数、定义函数、函数的参数、递归函数


    一、定义一个求二元一次方程的根的函数

    #Sublime Text
    import math
    def ee(a,b,c):
        delta=b*b-4*a*c
        if delta<0:
            return 'null'
        else:
            m=math.sqrt(delta)
            nx=(-b+m)/2/a
            ny=(-b-m)/2/a
            return nx,ny
    #python解释器
    >>> from hello import ee  #声明调用py文件中所定义的函数ee
    >>> ee(1,0,9)
    'null'
    >>> ee(1,0,-9)
    (3.0, -3.0)

    二、函数的参数

    函数的参数共有5类:位置参数、默认参数、可变参数、关键字参数、命名关键字参数

    位置参数:

    def pow(x):  
        return x*x  #求x的平方
        
    def pow(x,n):
        if n==0:
            return 1
        if n==1:
            return x
        return x*pow(x,n-1)  #求x的任意次方

    默认参数:

    #默认求x平方
    def pow(x,n=2):
        if n==0:
            return 1
        if n==1:
            return x
        return x*pow(x,n-1)
    
    >>> from hello import pow
    >>> pow(5)
    25
    >>> pow(5,3)
    125
    >>> pow(5,0)
    1
    #幼儿园新生等级,默认新生年龄为6,城市为ZZ
    def sign_in(name,gender,Age=6,city='ZZ'):
        print(name,gender,Age,city)
    
    >>> sign_in('jiaxinwei','boy')
    jiaxinwei boy 6 ZZ
    >>> sign_in('jiaxinwei','boy',city='NY')
    jiaxinwei boy 6 NY

    使用默认参数一个很大的坑:

    解释:Python函数在定义的时候,默认参数L的值就被计算出来了,即[ ] , 因为默认参数 L 也是一个变量,它指向对象[ ],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[ ]了。

    定义默认参数要牢记一点:默认参数必须指向不变对象(tuple,None,str)!!!

    可变参数

    可变参数顾名思义就是传入参数的个数是可变的,可以是任意多个

    def calc(*nums):
        sum=0
        for n in nums:
            sum=sum+n*n
        return sum
    
    >>> a=[1,2,3,4]
    >>> calc(*a)
    30
    >>> calc(1,2,3,4)
    30
    >>> calc(a)

    关键字参数

    def person(name,age,**kw):
        print('name:',name,'age:',age,'other:',kw)
    #其中name,age是必选参数,kw是关键字参数。在调用该函数时,可以只传入必选参数,也可以传入任意个关键字参数,关键字参数在函数内部自动组装为一个dict。
    >>> from hello import person
    >>> person('jiaxinwei',8) #1
    name: jiaxinwei age: 8 other: {}
    >>> person('jiaxinwei',8,city='NY',gender='M') #2
    name: jiaxinwei age: 8 other: {'city': 'NY', 'gender': 'M'}
    >>> extra={'city':'Beijing','job':'Student'} #3
    >>> person('jack',24,**extra)
    name: jack age: 24 other: {'city': 'Beijing', 'job': 'Student'}

    关键字参数的作用:是想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

    命名关键字参数

    如果要限制关键字参数的名字,就可以用命名关键字参数(不是很理解这句话)

    def person(name, age, *, city, job):
        print(name, age, city, job)
    # *号前面的是必选参数,后面的是命名关键字参数
    #如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个分隔符了
    def person(name,age,*args,city,job):
        print(name,age,args,city,job)
    #命名关键字函数可以有缺省值
    def person(name,age,*,city='Beijing',job='student'):
        print(name,age,city,job)
    
    >>> from hello import person
    >>> person('jiaxinwei',11)
    jiaxinwei 11 Beijing student

    现在还不知道命名关键字函数在什么情况下使用,先mark,后补实例~

    参数组合

    在python中定义函数,可以混用各种参数,不过参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数。

    所以对于任意函数,都可以通过类似 func(*args,**kw) 的形式调用它,无论它的参数是如何定义的。

    虽然可以组合多达五种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。

    编写程序:接收任意多数并计算乘积

    def product(*nums):
        if len(nums)==0:
            sum=0
        else:
            sum=1
        for x in nums:
            sum*=x
        return sum
    
    >>> from hello import product
    >>> product()
    0
    >>> product(5)
    5
    >>> product(5,6,7)
    210
    >>> product(5,6,7,9)
    1890
  • 相关阅读:
    嵌入式(C)笔试题
    经典C语言编程注意点
    深拷贝和浅拷贝(一)
    拷贝构造函数
    树与二叉树的概念
    线性数据结构
    排序算法_冒泡排序
    排序算法_选择排序
    机器学习_支持向量机
    数据库_11_1~10总结回顾+奇怪的NULL
  • 原文地址:https://www.cnblogs.com/jiaxinwei/p/8312709.html
Copyright © 2020-2023  润新知