Python知识点10---函数

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。

Python的函数和Scala的函数很像,语法很简单,注意点如下

bash 复制代码
1、函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2、任何传入参数必须放在圆括号中间,圆括号之间可以用于定义参数。
3、函数的第一行语句可以选择性地使用文档字符串---用于存放函数说明。
4、函数内容以冒号起始,并且缩进。
5、return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

例如:
def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

Python的函数其实在开发中,有一些会迷茫的点,这里我总结起来给大家说一下

1、函数的参数有多种写法,后面我会给大家罗列知识点,不过要知道Python的变量是一种弱检查,说白了就和js一样,名称只是数据的引用,而不会有类型的限制,所以导致大家书写的时候可能会很别扭

2、在Python中,函数必须先定义在调用,不能像c++那样声明函数

3、对于Python来说,同样遵行形参和传参的准则,但是Python更加详细的区分了值传递和地址传递,其中字符串、元组 和 数值是不可更改的对象,也就是我们常识的值传递,而列表、字典这些容器则是可以修改的对象,也就是地址传递,集合和布尔是两个特殊的数据类型不在考虑范围内


Python函数的参数,也有不同的叫法。

一、必备参数

必备参数就是我们常用的那种,写在参数位中,且对于方法体必不可少的参数

bash 复制代码
可写函数说明
def printme( str ):
   print str
 
调用printme函数
printme()

上面这个例子中没有传递必备参数str,所有执行的时候会报错
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    printme()
TypeError: printme() takes exactly 1 argument (0 given)

二、关键字参数

关键字参数,是指Python允许通过形参名称指定传入参数,忽略列常规写法中的顺序概念

bash 复制代码
def printme( str , index) :
	print str
 
#调用printme函数
printme(index = 1 , str = 'My Tom')

三、默认参数

默认参数,是指该参数拥有默认值,使得该参数可以不用传递

bash 复制代码
def printme( str , index = 1) :
	print str

#调用printme函数
printme(str = 'My Tom')

四、不定长参数

不定长参数,说的其实就是可变参,底层原理是一个容器,可变参定义的时候由星号开头

bash 复制代码
def printinfo( *vartuple ):
   for var in vartuple:
      print var
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )

不过在Python开发中大家可能会见到两个星号开头的参数,其实这个也叫可变参,只不过底层的实现容器不一样

一个星号的时候是普通的可变参,它的底层实现是一个元组

bash 复制代码
def printinfo( *vartuple ):
    print vartuple
 
# 调用printinfo 函数
printinfo( 70, 60 )

结果:(70, 60)

两个星号的时候叫做含关键字的可变参,它的底层是字典

bash 复制代码
def printinfo( **vartuple ):
    print vartuple
 
# 调用printinfo 函数
printinfo( name=70, age=60 )

结果:{'age': 60, 'name': 70}

除了常规的函数,Python也支持默认函数,原理是lambda表达式

bash 复制代码
sum = lambda arg1, arg2: arg1 + arg2
print(sum(1,1)) 	---输出2

Python也可以写递归函数,不过我这里就不写了,毕竟递归大家都知道是怎么回事,函数调用自身而已


同时Python函数的返回值任然是return关键字

bash 复制代码
def sum( arg1, arg2 ):
   return arg1+arg2
 
# 调用sum函数
total = sum( 10, 20 )

print(total)

Python的返回值还支持拆包操作,就是返回多个返回值

bash 复制代码
def num():
    return 100 , 200
 
# 调用printinfo 函数
num1 , num2 = num()

print(num1)
print(num2)

这里针对拆包说一句题外话,拆包不止可以作用在返回值上,还可以在平常操作中进行,必须我们写for循环遍历字典的时候遍历用的变量有两个,那就是一种拆包操作

不过对于字典我们其实可以直接拆包

bash 复制代码
a = {"name" : "Tom" , "age" : 12}
b , c = a
print(b)	---key
print(c)
print(a[b])		---value
print(a[c])

当然与函数相关联的局部变量、全局变量的概念我相信大家都知道,我这里就不给大家解释了,给大家准备了一个例子

bash 复制代码
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2 # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total
 
#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total
相关推荐
青 春 记 忆6 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO36 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO8 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白9 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲10 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)11 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机12 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor69212 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy13 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽14 小时前
真实即粗糙,光滑是伪造
人工智能·python