当前位置: 首页 > news >正文

Python知识点10---函数

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

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

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

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

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

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

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


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

一、必备参数

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

可写函数说明
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允许通过形参名称指定传入参数,忽略列常规写法中的顺序概念

def printme( str , index) :print str#调用printme函数
printme(index = 1 , str = 'My Tom')

三、默认参数

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

def printme( str , index = 1) :print str#调用printme函数
printme(str = 'My Tom')

四、不定长参数

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

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

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

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

def printinfo( *vartuple ):print vartuple# 调用printinfo 函数
printinfo( 70, 60 )结果:(70, 60)

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

def printinfo( **vartuple ):print vartuple# 调用printinfo 函数
printinfo( name=70, age=60 )结果:{'age': 60, 'name': 70}

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

sum = lambda arg1, arg2: arg1 + arg2
print(sum(1,1)) 	---输出2

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


同时Python函数的返回值任然是return关键字
def sum( arg1, arg2 ):return arg1+arg2# 调用sum函数
total = sum( 10, 20 )print(total)

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

def num():return 100 , 200# 调用printinfo 函数
num1 , num2 = num()print(num1)
print(num2)

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

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

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

当然与函数相关联的局部变量、全局变量的概念我相信大家都知道,我这里就不给大家解释了,给大家准备了一个例子
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):#返回2个参数的和."total = arg1 + arg2 # total在这里是局部变量.print "函数内是局部变量 : ", totalreturn total#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total

相关文章:

  • 【linux-imx6ull-设备树点灯】
  • 【第9章】SpringBoot中Bean的扫描和注册
  • 【UE5:CesiumForUnreal】——加载无高度地形数据
  • JavaScript 基础 - 对象
  • 算法训练营第四十八天 | 卡码网57 爬楼梯、LeetCode 322 零钱兑换、LeetCode 279 完全平方数
  • 《雅思口语真经总纲1.0》笔记——第二章:官方评分标准真经——Fluency Coherence 流利度和连贯性(1、连贯性)
  • 深度学习知识与心得
  • 使用反射调用Android隐藏API
  • 算法简单笔记4
  • [FreeRTOS 基础知识] 栈
  • 【源码】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源
  • 【vscode免密连接云服务器】
  • PHP 操作日期各种转换,常见日期转换,涉及聊天时间转换、涉及日周月年转换、涉及到图表日期转换
  • 【TB作品】MSP430F5529单片机,温控小风扇,DS18B20温度读取,PWM风扇
  • 【Git】在错误分支上开发了怎么办
  • Apache的基本使用
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Create React App 使用
  • iOS | NSProxy
  • javascript从右向左截取指定位数字符的3种方法
  • js写一个简单的选项卡
  • Making An Indicator With Pure CSS
  • scrapy学习之路4(itemloder的使用)
  • SQL 难点解决:记录的引用
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 初识 webpack
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于HAProxy的高性能缓存服务器nuster
  • 《码出高效》学习笔记与书中错误记录
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 交换综合实验一
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (力扣题库)跳跃游戏II(c++)
  • (一) 初入MySQL 【认识和部署】
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET CLR基本术语
  • .Net 路由处理厉害了
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET中使用Protobuffer 实现序列化和反序列化
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • :=
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [BUUCTF]-Reverse:reverse3解析