Python函数详解一(函数参数、变量作用域)
Python函数
函数是python程序的重要组成部分。所谓函数就是实现某一特定功能的代码段,可重复使用,提高了代码的利用率。
python除了可以直接使用内置函数,还支持自定义函数。
定义函数
使用 def
关键字,格式如下:
def函数名(参数列表):
函数体
函数的返回值
函数的返回值用return
语句返回,函数体内部的语句在执行时,一旦执行到return
时,函数就执行完毕,并将结果返回。
如果没有返回值,函数执行完毕后也会返回结果,只是结果为None。
函数参数详解
1.位置参数:
调用的时候必须传值,有几个就按顺序传几个值
示例
def area(length, width):
return 2 * (length + width)
# 调用函数时,必须传递2个参数,否则会引发错误
print(area(10,3))
2.默认参数:
定义时给出默认值,调用的时候可以不传参,使用默认值
默认参数好处是:如果一个函数有20多个参数,如果使用默认参数,在调用的时候只需要传递某些参数(注意传参数名)就可以了。
示例
def student(name,age=10,city="Beijing"):
print("姓名:{},年龄:{},城市:{}".format(name,age,city))
#调用方式一:
student("赵四")
#调用方式二:
student("张三",15,"Shanghai")
#调用方式三:
student("李明",12)
#调用方式四:
student("李明",city="Tianjin")
1.既有位置参数又有默认参数,位置参数在前,默认参数在后。
2.多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。 当不按顺序提供部分默认参数时,需要传入参数名(见调用方式四)。
3.可变参数:
可以传入任意个参数,传入的参数被组装为一个tuple。
示例
def sum(*num):
sum=0
for i in num:
sum=sum+i
return sum
#调用方式一:
sum(1,2,3)
# 调用方式二:
num = [1,2,3]
sum(*num)
4.关键字参数:
传入任意个含参数名的参数,这些关键字参数被组装为一个dict。
示例
def person(**kw):
for key in kw:
print("{}:{}".format(key,kw[key]))
# 调用方式一:
person(name="John",age=15)
# 调用方式二:
p={"name":"Alice","city":"Beijing"}
person(**p)
5.命名关键字参数:
对于关键字参数,函数调用的时候可以传入任意个不受参数名限制的关键字参数。但如果想必须传入某个名字的关键字参数,就可以用命名关键字参数。如上例中的person()函数,如果必须传入名为age的关键字参数,可以写成如下形式:
def person(name, *, age):
print("name={},age={}".format(name,age))
# 调用方式:
person("John", age=15)
命名关键字参数又和位置参数不同,命名关键字参数必须传入参数名。如果没有传入参数名,调用将报错。如果上面例子的调用方式写成 person("John", 15) 将报错
如果既有可变参数,又有命名关键字参数,参数顺序为:可变参数,命名关键字参数,并且命名关键字参数前不需*
def person(name, *args, age):
print(name,args,age)
python中五种参数可以组合使用,参数的定义顺序必须是:位置参数、默认参数、可变参数、命名关键字参数和关键字参数。
变量的作用域
局部变量
局部变量:在函数中定义的变量,只在函数内部起作用。
如果想让局部变量在函数外起作用,要声明为全局变量,需要使用global关键字来声明。
全局变量
全局变量:在模块层次中定义的变量,作用范围在整个模块。
1.全局变量的作用范围仅限于单个模块文件内。
2.如果函数内定义的局部变量和全局变量同名,函数在使用该变量的时候会优先使用局部变量。
示例
先定义一个全局变量,由于函数内部没有定义同名变量,所以调用的时候使用的是全局变量的值
var=123 #全局变量
def func():
print(var)
# 调用函数
func() #123
现在在函数内部定义一个同名变量,可以看到函数在调用的时候优先使用的是自己内部的变量,而在函数外部使用的是全局变量的值
var=123#全局变量
def func():
var=45#局部变量
print(var)
# 调用函数
func() #45
print(var) #123
现在我们把函数内的变量声明为全局变量,可以看到变量var在函数外部也起作用了
def func():
global var
var=45#局部变量
print(var)
# 调用函数
func() #45
print(var) #45
- Spring Cloud中Hystrix的请求合并
- Spring Cloud中Hystrix的请求缓存
- mysql主从复制配置
- Spring Cloud系列勘误
- Spring Cloud Stream使用细节
- Redis3 对集群进行重新分片
- Spring Cloud Stream初窥
- jquery事件绑定性能测试
- Spring Cloud Bus整合Kafka
- 图解Mac下如何安装管理MySQL
- Spring Cloud Bus整合RabbitMQ
- 结合Scikit-learn介绍几种常用的特征选择方法(下)
- Spring Cloud Bus之RabbitMQ初窥
- 结合Scikit-learn介绍几种常用的特征选择方法(上)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- VIM编辑器基操
- Weevely入手指南
- Mybatis是如何执行一条SQL命令的?
- 如何为机器学习工程设计Python接口
- [举个栗子]增加组件通用性的几个点
- 《剑指offer》第14天:最长公共前缀
- 20,000 字帮你搞定策略模式!
- LeetCode 09正则表达式匹配(递归VS动态规划)
- 初识ABP vNext(5):ABP扩展实体
- 教你如何用Paddle.js开发智能化微信小程序
- Spark+Kudu的广告业务项目实战笔记(一)
- Java的新未来:逐渐“Kotlin化”
- 用 GitLab 做 CI/CD 是什么感觉,太强了!!
- 避坑指南:通过expdp/impdp迁移数据的7个坑
- 组复制背景 | 全方位认识 MySQL 8.0 Group Replication