专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
贝壳社  ·  DeepSeek掀起狂潮,AI+制药这盘棋该咋下? ·  3 天前  
德大器械注册与临床  ·  【器械临床一起学】知情同意书的设计规范及知情 ... ·  3 天前  
第十一诊室  ·  这样的化妆品早就过期了,很多姑娘还在用! ·  3 天前  
51好读  ›  专栏  ›  爬虫俱乐部

《python定义函数知识大讲堂<2>》

爬虫俱乐部  · 公众号  ·  · 2018-07-10 09:46

正文

暑期Stata培训班招生啦!!! 接力线上的网课培训,我们在今夏又开始新一轮的线下培训啦! 8月4日至12日 ,爬虫俱乐部期待与您的相遇!培训具体内容详见推文《 暑期Stata编程技术定制培训班 》。

有问题,不要怕!点击推文底部“ 阅读原文 ”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱[email protected],我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是: https://stata-club.github.io ,粉丝们可以通过该网站访问过去的推文哟~

好消息 :爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱 [email protected] ,届时会有俱乐部资深高级会员为您排忧解难!



上个星期的推文《 python定义函数知识大讲堂<1> 》简单的向大家介绍了在python中 定义函数 return语句 的基础用法,今天将着重介绍定义函数时的各种参数,参数包含了我们想要传递给函数的信息,定义函数的时候,只要把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,调用者无需了解函数内部的结构。

首先我们需要区分形参和实参的区别。在上篇推文最开始我们定义了一个函数 greet ,其中 username 就是形参,而值“ ChrisWu ”则是实参:

def greet(username):
   print("Hello~"+username.title()+"!")
greet("ChrisWu")

函数定义中有多少种形参,那么在函数调用中就有多少种实参,向函数传递实参的方式主要有以下几种:

1.位置参数/必备参数;

2.缺省参数/默认参数;

3.关键字参数;

4.可变参数/不定长参数

在正文开始前,笔者有几句话要说:可能读者在看文字描述各类参数时会有些许的迷惑,笔者在刚开始学习的时候也总是拘泥于晦涩的文字,但实际上只要结合例子再自己动手操作一遍,就能很好的理解各类参数的含义~还请各位往下看~

一、位置参数

位置参数 (又称必备参数)须以正确的顺序传入函数,调用时的数量必须和声明时的一样,函数调用时每一个实参都关联到函数定义中的一个参数,下面我们通过一个例子来更好的理解位置参数:

def index(m,n):
   s = 1
   while n>0:
       n = n-1
       s = s*m
   return s
index(5,3)
index(3,5)

结果如图:

在这里我们定义了函数 index ,用来计算任意数的 n 次方,参数m和n都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数m和n。比如计算 5 3 次方, 必须是index(5,3) 而不是index(3,5)。

二、默认参数

在上例中,如果我们的代码是:

index(5)

那么将会有如下的运行错误提示:

程序截图显示我们调用函数时遗漏了一个位置参数 n ,这个时候默认参数(也称为缺省参数)就派上用场了,由于日常计算平方项的次数比较多,我们可以把第二个位置参数 n 的默认值设置为 2 ,具体程序如下:

def index(m,n=2):
   s = 1
   while n>0:
       n = n-1
       s = s*m
   return s  
index(5)

结果如图:

在定义函数时,我们在第二个位置参数后面加了个 =2 ,这表示n的默认值为2,那么我们在调用函数时,即使只输入一个参数也不会报错,它默认表示的是计算n=2即m的平方项的值。默认参数简化了函数的调用,在这里需要注意的是,定义函数时,默认参数要放在位置参数的后面。

三、关键字参数

关键字参数是传递给函数的名称-值对,它允许我们传入 0个 任意个 包含参数名的参数,它直接将参数中形参的名称和实参的值关联起来了,因此允许函数调用时参数的顺序与定义时不一致,下面的例子将帮助我们理解关键字参数:

def info(name,age):
   print("\nMy name is " + name.title())
   print("I'm " + age.title() + " years old")
info(name = 'Chenshuo',age = '25')
info(age = '25',name = 'Chenshuo')

结果如图:


当然你可以使用位置参数的方式直接来调用函数,结果也是一样的:

info('chenshuo','25')

以上只是关键字参数的基础用法,前面曾经提到过关键字参数允许我们传入任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个字典,请看下例:

def info(name,age,**kw):
    print("\nMy name is " + name.title())
    print("I'm " + age.title() + " years old")
    print(kw)
info("Chenshuo","25")
info("Chenshuo","25",city="Hefei",sex="male")

定义函数时在参数kw前加上两个**,表示kw为 关键字参数 ,这样一来我们不仅可以只传入位置参数,还可以传入任意个数的关键字参数,结果如图:

可以看到传入的关键字参数是以字典的形式作为结果展示的,关键字参数最大的功能就是 扩展了函数的功能 ,在上面定义的函数info中,我们不仅可以得到关于名字和年龄的基础信息,还允许函数的调用者传递更多的其他的信息。

我们还可以限制接受哪些特定的关键字参数,这叫做 命名关键字参数 ,程序如下:

def info(name,age,*,city,sex):
   print(name,age,city,sex)
info("Chenshuo","25",city="Hefei",sex="male")

和关键字参数前加**不同,命名关键字参数使用的是*,*后面的参数被视为命名关键字参数。结果如图:

如果你试图传入非命名关键字参数,调用时则会报错:

四、可变参数

有时我们可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做 可变参数 或者叫 不定长参数 ,顾名思义,可变参数就是传入的参数个数是可变的,可以是任意个,包括0个。和上述3种参数不同,声明时不会命名。

我们以这样一个数学题目为例,我们要计算 …… 的值,在这里传入的参数个数是不确定的,那么如何定义函数来实现这个计算呢,程序如下:

def square(*nums):
   sum = 0
   for i in nums:
       sum = sum + i*i
   return sum
square(1,2,3)

在函数名称nums前 加* 即可用来表示 可变参数 ,由于传入的可变参数的个数是不确定的,在函数内部接收到的是由参数组成的元祖,所以在函数定义时,用 for循环 来遍历元祖中的每一个参数进行计算。结果如图:


注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。 另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~





文字编辑:赵宇亮

技术总编:刘贝贝

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6. Mata中的数据导出至Excel







请到「今天看啥」查看全文