【Python】函数
简介
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性和代码的重复利用率。
内置函数
Python有很多内置函数可以供开发者直接使用。 也可以在交互式命令行通过help(函数名)查看函数的帮助信息。 Python内置函数
自定义函数
定义函数
自定义函数规则:
- 定义函数以 def 关键词开头,依次写函数名、括号、括号中的参数和冒号。
- 函数体的第一行语句应使用文档字符串存放函数说明。
- 通常用return结束函数并返回函数的返回值。
调用函数
调用Python的函数,需要根据函数定义,传入正确的参数。
def area(width, height):
# 计算面积函数
return width * height
width = int(input('宽:'))
height = int(input('长:'))
print('面积是:{0}'.format(area(width,height)))
参数
- 位置参数
位置参数须以正确的顺序传入函数,且调用时的数量和声明时一样
area(5,10)
- 关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
关键字参数的表现形式:
1. 在参数前加两个*,可以传入任意不受限制的关键字参数
2. 命名关键字参数,限制传入关键字参数的名字,命名关键字参数需要一个特殊分隔符*
def persion(name,age,**others):
print('Name:',name,'age:',age,'other:',others)
persion('Henry-chr',26,city = 'Beijing',source = 96)
def persion1(name,age,*,city):
print('Name:',name,'age:',age,'city:',city)
persion1('Henry-chr',26,city = 'Beijing')
- 默认参数
默认参数可以简化函数的调用,降低调用函数的难度
设置默认参数时需要注意以下几点:
1. 默认参数必须指向不可变对象
2. 默认参数必须放在必须参数后
3. 当存在多个默认参数时,如果某个参数非默认值,需要把参数名写上
def persion2(name,age,gender = 'M',city = 'Shanghai'):
name = name
age = age
gender = 'boy' if gender == 'M' else 'girl'
city = city
print('My name is {0}.\nI am {1} years old.\nI am {2}.\nI am from {3}.'.format(name,age,gender,city))
persion2('Henry-chr',26,city = 'Beijing')
- 可变参数
可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
可变参数有两种表现形式:
1. 定义位置参数,调用的时候,先组装成一个list或tuple
2. 定义可变参数,在参数前加一个*,调用时可以传任意个参数也可以在list或tuple前加*传入
def sumall1(numbers):
sum = 0
for i in numbers:
sum = sum + i*i
return sum
sumall1((1,3,5))
def sumall(*numbers):
sum = 0
for i in numbers:
sum = sum + i*i
return sum
list = [2,4,5]
sumall(*list)
参数组合
Python中各种参数可以组合使用,但定义顺序必须是:位置参数、默认参数、可变参数、命名关键字参数和关键字参数。
建议不要同时使用太多的参数组合,否则函数接口的可理解性很差。
参数小结
默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict
命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。
定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。
匿名函数
Python也可通过lambda创建函数,不需要像def那样标准的形式去定义
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
语法格式如下:
lambda [arg1 [,arg2,.....argn]]:expression
for_x = lambda arg1,arg2: arg1*arg2
for_x(5,10)
递归函数
函数在内部调用自身本身
递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
原文地址:https://www.cnblogs.com/henry-chr/p/15132703.html
- sql server存储过程编程
- sql server 2008 数据库的完整性约束
- sql server T-SQL 基础
- sql server 触发器
- T-SQL 查询、修改数据表
- sql server 事务处理
- Android P专区免费开放 -- 同样的Android,不同的体验
- YJango:TensorFlow中层API Datasets+TFRecord的数据导入
- CentOS7上ElasticSearch安装填坑记
- ASP.NET Core 阶段性总结
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程案例演示
- C# 窗体常用API函数 应用程序窗体查找
- C#进阶系列——WebApi接口测试工具:WebApiTestClient
- 由Dapper QueryMultiple 返回数据的问题
- 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 数组属性和方法
- Keras 数据增强ImageDataGenerator多输入多输出实例
- TensorFlow中如何确定张量的形状实例
- 使用Dajngo 通过代码添加xadmin用户和权限(组)
- python和js交互调用的方法
- Python中flatten( ),matrix.A用法说明
- python中id函数运行方式
- CentOS 7如何实现定时执行python脚本
- PHP自动生成缩略图函数的源码示例
- 解决tensorflow 释放图,删除变量问题
- php生成word并下载代码实例
- TensorFlow保存TensorBoard图像操作
- 浅谈PHP SHA1withRSA加密生成签名及验签
- PHP PDO数据库操作预处理与注意事项
- laravel 框架配置404等异常页面
- Django –Xadmin 判断登录者身份实例