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

python学习笔记5-python的函数

函数 

函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法。 在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

定义

函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。

特性

1.减少重复代码 
2.使程序变的可扩展
3.使程序变得易维护

语法

def sayhi()#使用def来定义一个函数,后面跟函数名()。
    print("Hello")#函数中的操作内容,打印一个Hello
sayhi()#函数名+括号的方式来实现函数的调用
#打印结果:Hello

函数的参数

a = 2 #定义变量a
b = 10 #定义变量b

def calc(x,y)#x,y形参
    res x**y
    return res
print(calc(a,b))#a,b实参
#打印结果:1024
#注:return可返回结果给函数;也是代表函数的结束

形参:只有在被调用时才分配内存单元,在调用结束后,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

注:1、形参即局部变量,作用域只在函数内部,外部变量默认不能被函数内部修改,只能被引用。

  2、如果在函数内部需要修改全局变量的话需要使用“global”;但强烈不建议这么使用。

  3、函数内部可以修改列表、字典、集合、实例。

实参:可以是常量、变量、表达式、函数等,无论实参是何种类型,在进行函数调用时他们必须得有确定的值,以便把这些值传给形参。因此,应预先赋值、输入等办法使参数获得确定值。

注:有确定值的参数,所有的数据类型都可以被当做参数传给函数。

 函数的参数种类

1、位置参数

 按照函数中的参数位置一一对应传值。

def stu_register(name,age,country,course):
    print("学生注册信息".center(20,'-'))
    print("姓名:",name)
    print("年龄:",age)
    print("国籍",country)
    print("课程:",course)
stu_register("xiaoling",22,"CN","Python")#按照参数位置一一传值
stu_register("Angie",23,"CN","linux")#按照参数位置一一传值

以上代码按照参数的位置进行传值,传入的内容必须一一对应,否则内容与有意义的参数名则不会对应。

2、默认参数

提前给函数的参数赋值。

在进行学生信息注册时,发现学生的国籍都是“CN”,此时就可以将“CN”设置成默认参数。

def stu_register(name,age,course,country="CN"):#给参数一个默认值
    print("学生注册信息".center(20,'-'))
    print("姓名:",name)
    print("年龄:",age)
    print("国籍",country)
    print("课程:",course)
stu_register("xiaoling",22,"Python")
stu_register("Angie",23,"linux")

注:默认参数要放到所有的参数最后面,否则会报错;默认参数可被重新传入的实参修改。


3、关键参数

正常情况下给函数传参是要按顺序的,如果不想按位置传参,那么可以使用关键参数。

def stu_register(name,age,course,country="CN"):
    print("学生注册信息".center(20,'-'))
    print("姓名:",name)
    print("年龄:",age)
    print("国籍",country)
    print("课程:",course)
stu_register("xiaoling",course="Python",age=22)#关键参数可以不用按位置传值
#打印结果
-------学生注册信息-------
姓名: xiaoling
年龄: 22
国籍 CN
课程: Python

注:关键参数同默认函数一样,必须放在位置参数后面。


4、非固定参数

在定义函数时,如果想要传入多少个参数,就可以使用非固定函数,*args。

def stu_register(name,age,*args):
    print(name,age,args)
stu_register("xiaoling",22)
#打印结果:xiaoling 22 () 因为没有给args传值所以是个空元祖
stu_register("xiaoling",22,"CN","Python")
#打印结果:xiaoling 22 ("CN","Python")

注:*args以位置参数的形式传入,多余的值保存为一个元祖。
非固定参数还可以使用**kwargs。

def stu_register(name,age,*args,**kwargs):
    print(name,age,args,kwargs)
stu_register("xiaoling",22)
#打印结果 xiaoling 22 () {} 因为未传值,打印一个空元祖和空字典

stu_register("xiaoling",22,"CN","Python",hobby="阅读",province="山东")
#打印结果xiaoling 22 ('CN', 'Python') {'province': '山东', 'hobby': '阅读'}

注:*args 以位置参数的方式传值;**kwargs以关键参数的方式传值。

注:参数的顺序,位置参数-->默认参数-->*args-->**kwargs

 嵌套函数:

简单的说就是函数内套函数

name = "Angie"

def change_name():
    name = "Angie2"
    def change_name2():#函数中在定义一个函数
        name = "Angie3"
        print("第3层打印", name)
    change_name2()  # 调用内层函数
    print("第2层打印", name)
change_name()
print("最外层打印", name)

匿名函数:
匿名函数就是不需要显示的指定函数

def calc(n):
    return n*2
print(calc(2))
#打印结果:4
calc2 = lambda n:n*2 #使用lambda创建函数,并赋值个一个变量
print(calc(2))
#打印结果:4

匿名函数的使用,因为函数也可以作为参数进行传入,此时就可以使用匿名函数

res = map(lambda n:n*2,[1,2,3])
for i in res:
    print(i)

注:for i in map(lambda x:x*2 if x > 5 else x+1,[1,2,3,4,5,6,7,8,9])

高阶函数

  一个函数的参数可以是任意值,也可以是一个函数,把一个函数当做参数传给另一个函数,就称为高阶函数 
特点:
  1、把一个函数的内存地址传给另一个函数
  2、一个函数把另外一个函数当做返回值返回
def add(x,y,f):
    return f(x)+f(y)

res = add(3,-5,abs)
print(res)
#将abs()函数当做参数传入另一个函数
#打印结果:8

内置函数

 

转载于:https://www.cnblogs.com/yinuoxiaofang/p/7131239.html

相关文章:

  • oracle物化视图(materialized view)
  • 绝世好题bzoj4300
  • 在存储过程中拥有role的权限(Authid Current_User)
  • 渐变维度(Slowly Changing Dimension)及其处理方法
  • 获取url值
  • 1.Angular框架-angular介绍与基本使用,MVC模式介绍
  • Oracle性能调优-优化排序操作
  • 鲜为人知的软件项目管理原则
  • 业界经典语录
  • 数据仓库设计的思考
  • ubuntu下安装Java并设置环境变量
  • arguments、this指针、call和apply、bind语法
  • ubuntu修改主机名
  • SSH设置不输入密码登陆方式
  • vb编程代码大全
  • [PHP内核探索]PHP中的哈希表
  • centos安装java运行环境jdk+tomcat
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • golang中接口赋值与方法集
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java比较器对数组,集合排序
  • Java编程基础24——递归练习
  • spring security oauth2 password授权模式
  • 复杂数据处理
  • 检测对象或数组
  • 将 Measurements 和 Units 应用到物理学
  • 利用DataURL技术在网页上显示图片
  • 马上搞懂 GeoJSON
  • 前嗅ForeSpider采集配置界面介绍
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 十年未变!安全,谁之责?(下)
  • 跳前端坑前,先看看这个!!
  • 微信小程序:实现悬浮返回和分享按钮
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​Python 3 新特性:类型注解
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​批处理文件中的errorlevel用法
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 安徽锐锋科技IDMS系统简介
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (16)Reactor的测试——响应式Spring的道法术器
  • (附源码)ssm码农论坛 毕业设计 231126
  • (四)Controller接口控制器详解(三)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • *** 2003
  • .net framework4与其client profile版本的区别
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET程序员迈向卓越的必由之路
  • .net和php怎么连接,php和apache之间如何连接
  • /proc/stat文件详解(翻译)
  • ::