Python3学习之路~3.1 函数基本语法及特性、返回值、参数、局部与全局变量
1 函数基本语法及特性
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
语法定义:
def sayhi():#函数名
print("Hello, I'm nobody!") sayhi() #调用函数
可以带参数
#下面这段代码
a,b = 5,8
c = a**b
print(c) #改成用函数写
def calc(x,y): #x、y是形参
res = x**y
return res #返回函数执行结果 c = calc(a,b) #a、b是实参,结果赋值给c变量
print(c)
2 返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
def test01():
pass def test02():
return 0 def test03():
return 3,'hello',['Amy','Bob'],{'name':'Alex','age':21} t1=test01()
t2=test02()
t3=test03() print('from test01 return is [%s]:'%type(t1),t1)
print('from test02 return is [%s]:'%type(t2),t2)
print('from test03 return is [%s]:'%type(t3),t3) # 输出:
# from test01 return is [<class 'NoneType'>]: None
# from test02 return is [<class 'int'>]: 0
# from test03 return is [<class 'tuple'>]: (3, 'hello', ['Amy', 'Bob'], {'name': 'Alex', 'age': 21})
总结:
- 返回值数=0:返回None
- 返回值数=1:返回object
- 返回值数>1:返回tuple
3 函数参数
1.形参和实参
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体时使用形参,目的是在函数调用时接收实参(实参个数、类型应与形参一一对应)。
实参:实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。
2.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
def test(x,y):
print(x)
print(y) test(1,2) #位置参数:实参与形参位置一一对应
test(y=2,x=1) #关键字参数:与形参位置无关
test(1,y=2) #混用:关键字参数必须放在位置参数之后
#test(y=2,1) #报错
3.默认参数
默认参数在调用时不指定,那就是默认值,指定了的话,就用你指定的值。
特点:调用函数时,默认参数非必须传递。
def test(x,y=2):
print(x)
print(y) test(1) #不指定默认参数
test(1,5) #指定默认参数
4.参数组(非固定参数)
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
*args:接收 0-N 个位置参数,转换成元组形式
def test1(*args):
print(args) test1(1,2,3,4,5,6) # 输出:(1, 2, 3, 4, 5, 6)
test1(*[1,2,3,4,5,6]) # 同上 def test2(x,*args):
print(x,args) test2(1,2,3,4,5,6) # 输出:1 (2, 3, 4, 5, 6)
test2(1) # 输出:1 () ,后面这个()就是args,只是因为没传值,所以为空
**kwargs:接收 0-N 个关键字参数,转换成字典的形式
def test1(**kwargs):
print(kwargs) test1(name='Alex',age=21,sex='M') # 输出:{'name': 'Alex', 'age': 21, 'sex': 'M'}
test1(**{'name':'Alex','age':21,'sex':'M'}) # 同上
test1() #输出:{} def test2(name,**kwargs):
print(name,kwargs) test2('Alex',age=21,sex='M') # 输出:Alex {'age': 21, 'sex': 'M'}
test2('Alex') # 输出:Alex {} def test3(name,age=21,**kwargs):
print(name,age,kwargs) test3('Alex',sex='M',hobby='singing',age=18) # 输出:Alex 18 {'sex': 'M', 'hobby': 'singing'}
4 局部变量与全局变量
#像字符串,数字等类型的变量不可以在局部修改其值
name = "Alex" def change_name(name):
print("before change:", name) # Alex
name = "alex"
print("after change", name) # alex change_name(name)
print( name) # Alex #像列表、字典、集合、类等类型的变量可以在局部修改
names=['Amy','Bob','Cindy']
def change_name(names):
print("before change:", names) # ['Amy', 'Bob', 'Cindy']
names[0] = "Alex"
print("after change", names) # ['Alex', 'Bob', 'Cindy'] change_name(names)
print( names) # ['Alex', 'Bob', 'Cindy']
Python3学习之路~3.1 函数基本语法及特性、返回值、参数、局部与全局变量的更多相关文章
- javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量
定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...
- Python3学习之路~0 目录
目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...
- 【Java学习笔记之七】java函数的语法规则总结
函数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数. ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- C#中的函数(二) 有参有返回值的函数
接上一篇 C#中的函数(-) 无参无返回值的函数 http://www.cnblogs.com/fzxiaoyi/p/8502613.html 这次研究下C#中的函数(二) 有参有返回值的函数 依然写 ...
- IOS学习之路-- 指针&宏函数
如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果* ...
- Python3学习之路~4.3 装饰器
定义:本质是函数,装饰其他函数就是为其他函数添加附加功能. 原则: 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式 实现装饰器知识储备: 函数即“变量” 高阶函数 把一个函数名当做实参传递给 ...
- Python3学习之路~4.1 列表生成式、生成器
1 列表生成式 我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,怎么实现?你可能会想到2种方式 a=[0,1,2,3,4,5,6,7,8 ...
- Python3学习之路~8.1 socket概念及参数介绍
一 socket介绍 TCP/IP 基于TCP/IP协议栈的网络编程是最基本的网络编程方式,主要是使用各种编程语言,利用操作系统提供的套接字网络编程接口,直接开发各种网络应用程序. socket概念 ...
随机推荐
- golang模板语法
https://www.cnblogs.com/Pynix/p/4154630.html https://blog.csdn.net/huwh_/article/details/77140664 ht ...
- How to hard reset Visual Studio instance
When developing extensions sometimes you just mess up, others someone else does. If you start gettin ...
- 相比Redis,Memcached真的过时了吗?
下面内容来自Redis作者在stackoverflow上的一个回答,对应的问题是<Is memcached a dinosaur in comparison to Redis?>(相比Re ...
- Google Colab 免费GPU服务器使用教程
Google免费GPU使用教程(亲测可用) 今天突然看到一篇推文,里面讲解了如何薅资本主义羊毛,即如何免费使用Google免费提供的GPU使用权. 可以免费使用的方式就是通过Google Cola ...
- 使用Core Audio实现对声卡输出的捕捉
涉及的接口有: IMMDeviceEnumerator IMMDevice IAudioClient IAudioCaptureClient 主要过程: 创建多媒体设备枚举器(IMMDeviceEnu ...
- 【zheng环境准备】安装redis
1.下载源码,解压缩后编译源码 wget http://download.redis.io/release/redis-2.8.3.tar.gz tar -xzf redis-.tar.gz cd r ...
- Power BI 报表服务器发布
Power BI 报表服务器让你的用户能够访问数据.获取见解,并能够使用 SQL 报表服务器服务的企业报告功能 - 这一切都在现代本地解决方案中完成.让用户能够直观浏览数据并快速发现模式,以便更快作出 ...
- web站点健康检测和告警小脚本
#!/bin/sh web01="http://172.18.52.xx:8080/web/api/getTime" web02="http://172.18.52.xx ...
- 7.9CSS总结
2018-7-9 18:01:18 1.类选择器是 用 . .xxx{} (ps,公司常用的是类选择 ) 2.id选择器是用 # #xx{} (id选择器并不常用) 3.css ...
- db2命令参数with ur
查询DB2数据库,老遇到select * from XXX with ur, 好奇ur是什么作用(转) DB2中,共有四种隔离级:RS,RR,CS,UR,DB2提供了这4种不同的保护级别来隔离数据. ...