zoukankan      html  css  js  c++  java
  • day5_函数的参数

    http://www.nnzhp.cn/archives/154 

    一、函数在调用的时候,可以传入参数,有形参和实参

    形参:

    形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。

    实参:

    实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。函数调用结束返回主调用函数后则不能再使用该形参变量。

    简单点说,形参就是函数接收的参数,而实参就是你实际传入的参数。

    def calc(x,y):#定义一个函数,参数有x、y.x、y就是形参
        print(x*y)#输出x*y的值
    calc(2,5)#嗲用calc函数,2、5就是实参

    二、函数的四种形参类型:

    1、位置参数:

    位置参数,字面意思也就是按照参数的位置来进行传参,比如说上面的calc函数,x和y就是位置参数,位置参数是必传的,

    有几个位置参数在调用的时候就要传几个,否则就会报错了,那如果有多个位置参数的话,记不住哪个位置传哪个了怎么办,可以使用位置参数的名字来指定调用

    比如说上面的那个calc函数也可以使用calc(y=1,x=2)这样来调用,这种调用方式叫做关键字传参

    2、默认参数:

    默认参数就是在定义形参的时候,给函数默认赋一个值,比如说数据库的端口这样的,默认给它一个值,这样就算你在调用的时候没传入这个参数,它也是有值的

    so,默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数后面定义。

    def conn_mysql(user, passwd, port=3306):  # 定义一个连接mysql的方法,虽然这个方法并没有连接mysql,我只是举个默认值参数的例子,port就是一个默认值参数
        print(user, passwd, port)
    conn_mysql('root', '123456')  # 没指定默认值
    conn_mysql('root', '123456', port=3307)  # 指定默认值参数的值

    非固定参数:

    上面的两种位置参数和默认参数都是参数个数是固定的,如果说我一个函数,参数不是固定的,我也不知道以后这个函数会扩展成啥样,可能参数越来越多,这个时候如果再用固定的参数,那后面程序就不好扩展了,这时候就可以用非固定参数了,非固定参数有两种,一种是可变参数,一种是关键字参数。

    3、可变参数:

    可变参数用*来接收,后面想传多少个参数就传多少个,如果位置参数、默认值参数、可变参数一起使用的的话,可变参数必须在位置参数和默认值参数后面。可变参数也是非必传的。

    可变参数会把传入的元素放到了一个元组里面,不限制参数个数。它会用在参数比较多的情况下,比如给多个人发邮件,发短信。

    def args(name,age,sex='',*args):#可变参数会把后面多传的参数放到args这个元组中
        print(name,age,args)
    args('小黑',18,'nv','python','China')

    输出:

    小黑 18 ('python', 'China')

    4、关键字参数:

    关键字参数使用**来接收,后面的参数也是不固定的,想写多少个写多少个,当然也可以和上面的几种一起来使用,如果要一起使用的话,关键字参数必须在最后面。

    使用关键字参数的话,调用的时候必须使用关键字传参。关键字参数也是非必传的。

    def send_sms2(**kwargs):#调用的时候会把传入的关键字参数放到kwargs这个字典中
        #1、不是必传的
        #2、不限制参数个数
        print(kwargs)
    
    send_sms2() #返回空字典
    send_sms2(name='xiaohei',sex='nan')
    send_sms2(addr='北京',country='中国',c='abc',f='kkk')

    结果:

    {}
    {'name': 'xiaohei', 'sex': 'nan'}
    {'country': '中国', 'addr': '北京', 'c': 'abc', 'f': 'kkk'}

    以上各参数综合使用的时候,顺序为:位置参数-默认值参数-可变参数-关键字

    def my(name,country='China',*args,**kwargs):
        #1、位置参数 2、默认值参数 3、可变参数 4、关键字
        print(name)
        print(country)
        print(args)
        print(kwargs)
    my('xiaojun','Japan','beijing','天通苑',color='红色',age=32)

    结果:

    xiaojun
    Japan
    ('beijing', '天通苑')
    {'age': 32, 'color': '红色'}

    备注:定义一个函数后,参数因为不知道是什么类型,所以.不出来方法,可以冒号后面写上类型,这样就可以.出方法,但是实际参数时什么类型,还是要看传入的值。不能根据冒号后面的类型决定 

    def my4(s:str,d:dict):#冒号后面,只是提示一下应该传什么类型,不传也行,最终传的值是什么类型还是看实际传的

  • 相关阅读:
    SpringMVC之数据处理及跳转
    SpringMVC之控制器Controller和RestFul风格
    第一个SpringMVC程序
    什么是SpringMVC
    Spring声明式事务
    【嘎】字符串-反转字符串
    【嘎】字符串-字符串中的单词数
    【嘎】二叉树-226. 翻转二叉树
    【嘎】数组-面试题 01.07. 旋转矩阵-看题解
    【嘎】字符串-统计位数为偶数的数字
  • 原文地址:https://www.cnblogs.com/once-again/p/9580961.html
Copyright © 2011-2022 走看看