函数

1、 函数的概念

a.函数所解决的问题:

复杂度增大、组织结构不清晰、可读性差、代码冗余、可扩展性差

函数就是具备某一种功能的物件

实现准备工具的过程称为函数的定义

遇到特定的场景拿来就用称为函数的调用

b.函数的分类:

内置函数

自定义函数

2、函数的使用:

1 先定义

2 再调用

a.函数的定义语法:

def  函数名(arg1,arg2,arg3):

“注释”

函数体

return   返回值

注意:

函数名一般是动词

b. retrun的使用:

return 返回值没有类型限制

在函数内部可以有多个return,但只能执行一次,函数就结束调用,并且会把return后的值作为函数执行的结果返回

没有return:返回None,等同于return None

return 一个值:返回该值

return 多个值:返回多个值组成的一个元组

c.定义的三种形式:

无参:应用场景仅仅只是执行一些操作,比如与用户交互、打印等

有参:需要根据外部传进来的参数,才能执行相应的逻辑操作,比如统计长度,求最大值

空函数:设计代码结构

3、函数的调用:

函数调用的三种形式:

a.语句形式

b.表达式形式

c.当做另外一个函数的参数

def my_max(x,y):if x > y:return xelse:return ymy_max(1,2) #语句形式res=my_max(1,2)*10 #表达式形式# res1=my_max(1,2)     #如果不使用第三种形式要写这两行
# res2=my_max(res1,3)res2=my_max(my_max(1,2),3) #函数调用可以当做另外一个函数的参数
print(res2)

练习:

#定义阶段
def foo():print('from foo')bar()
# print(foo)
def bar():print('from bar')#调用阶段
foo()

注意:

函数在定义阶段只检测语法,不执行代码

4、函数参数

a.参数的形式

1 形参

2 实参

#形参:在定义函数时,括号内的参数成为形参
#特点:形参就是变量名
# def foo(x,y): #x=1,y=2
#     print(x)
#     print(y)#实参:在调用函数时,括号内的参数成为实参
#特点:实参就是变量值
# foo(1,2)#在调用阶段实参(变量值)才会绑定形参(变量名)
#调用结束后,解除绑定

b.参数的分类:

1 位置参数:按照从左到右的顺序依次定义的参数

位置形参:必须被传值,并且多一个不行,少一个也不行

位置实参:与形参按照位置一一对应

位置参数:按照从左到右的顺序依次定义的参数位置形参:必须被传值,并且多一个不行,少一个也不行位置实参:与形参按照位置一一对应def foo(x,y):print(x)print(y)foo('egon',1,2)

2 关键字实参:指的是按照name=value的形式,指名道姓地给name传值

注意问题:

问题一: 语法规定位置实参必须在关键字实参的前面

问题二: 一定不要对同一个形参传多次值

关键字实参:指的是按照name=value的形式,指名道姓地给name传值
def foo(name,age):print(name)print(age)foo('egon',18)
foo(age=18,name='egon')关键字实参需要注意的问题是:
def foo(name,age,sex):print(name)print(age)print(sex)foo('egon',18,'male')
print('======>')
foo(sex='male',age=18,name='egon')
foo('egon',sex='male',age=18)问题一:语法规定位置实参必须在关键字实参的前面
foo('egon',sex='male',age=18)问题二:一定不要对同一个形参传多次值
foo('egon',sex='male',age=18,name='egon1')foo('male',age=18,name='egon1')

3 默认形参:在定义阶段,就已经为形参赋值,意味在调用阶段可以不用传值

默认参数需要注意的问题:
问题一:默认参数必须放在位置参数之后
问题二:默认参数只在定义阶段赋值一次,而且仅一次
问题三:默认参数的值应该定义成不可变类型

默认形参:在定义阶段,就已经为形参赋值,意味在调用阶段可以不用传值
def foo(x,y=1111111):print(x)print(y)foo(1,'a')def register(name,age,sex='male'):print(name,age,sex)register('asb',73)
register('wsb',38)
register('ysb',84)
register('yaya',28,'female')默认参数需要注意的问题
问题一:默认参数必须放在位置参数之后
def foo(y=1,x):print(x,y)问题二:默认参数只在定义阶段赋值一次,而且仅一次
x=100
def foo(a,b=x):print(a,b)x=111111111111111111111111111111
foo('egon')问题三:默认参数的值应该定义成不可变类型

4 可变长参数:指的是实参的个数不固定

形参必须要两种机制来分别处理实参:

按照位置定义的实参溢出的情况:*

跟按照关键字定义的实参溢出的情况:**

处理位置实参:*会把溢出的位置实参保存成元组

def foo(x,y,*args): #nums=(3,4,5,6,7)print(x)print(y)print(args)foo(1,2,3,4,5,6,7) #*
foo(1,2) #*输出结果:
1
2
(3, 4, 5, 6, 7)
1
2
()

处理关键字实参:**会把溢出的关键字实参保存成字典

def foo(x,y,**kwargs): #kwargs={'z':3,'b':2,'a':1}print(x)print(y)print(kwargs)
foo(1,2,z=3,a=1,b=2) #**输出结果:
1
2
{'z': 3, 'a': 1, 'b': 2}

*、**结合使用

def wrapper(*args,**kwargs): #args=(1,2,3) kwargs={'a':1,'b':2}print(args)print(kwargs)
wrapper(1,2,3,a=1,b=2)

命名关键字参数:在*后面定义的形参称为命名关键字参数,必须是以关键字实参的形式传值

def foo(name,age,*args,sex='male',group):print(name)print(age)print(args)print(sex)print(group)foo('alex',18,19,20,300,group='group1')

5、函数对象

函数是第一类的对象:指的是函数可以被当做数据传递

a.被赋值

b.可以当做参数传入

c.可以当做函数的返回

d.可以当做容器类型的元素

def foo():print('from foo')
f=foo          #把函数名赋值给变量
print(f)
f()            #使用变量名可以调用函数def wrapper(func):# print(func)func()
wrapper(foo)          #把函数名foo当做参数传递给funcdef wrapper(func):   #把函数名foo当做参数传递给func,func当做return         return func               #的返回值
res=wrapper(foo)
print(res)cmd_dic={'func':foo            #把函数名以value的形式传入字典中
}print(cmd_dic)cmd_dic['func']()

函数练习:

1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批量修改操作
filename=input('请输入你要修改的文件名:')
old=input('请输入你要修改的内容:')
new=input('请输入新内容:')
def modify(filename,old,new):import oswith open(filename,'r',encoding='utf-8') as read_f,\open('.bak.swap','w',encoding='utf-8') as write_f:for line in read_f:if old in line:line=line.replace(old,new)write_f.write(line)os.remove(filename)os.rename('.bak.swap',filename)modify(filename,old,new)2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
def calculation(str):res={'nums': 0,'string': 0,'space': 0,'other': 0}for s in str:if s.isdigit():res['nums']+=1if s.isalpha():res['string']+=1if s.isspace():res['space']+=1else:res['other']+=1return res
str=input('请输入要判断的字符串:')
res=calculation(str)
print(res)3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5
def judge(object):if len(object) >5:return object
object=input('请输入字符串、列表或元组:')
judge(object)4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
def check(str):if len(str) >2:str=str[0:2]return str
str=input('请输入元素:')
print(check(str))5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者
def check_index(objects):return objects[::2]
objects=input('请输入列表或元组:')
print(check_index(objects))6、写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
dic = {'k1':'v1v1','k2':[11,22,33,44]}
def check_dic(dic):d={}for key,value in dic.items():if len(value) > 2:d[key]=value[0:2]return dprint(check_dic(dic))

转载于:https://blog.51cto.com/lyndon/1948661

python基础---函数相关推荐

  1. Python基础-函数,高阶函数

    Python基础-函数 1.函数的定义和函数的执行流程: """ 函数学习 """print('程序开始') a = 10 # 在内存中申请 ...

  2. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  3. python基础函数及用法意思_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

  4. Python基础函数学习笔记(一)

    今天晚上学习的内容是Python的一些基础函数及其应用.参考书籍--<Python计算域编程实践-多媒体方法>第二章. 主要函数有print def ord abs pickAFile m ...

  5. python基础函数大全pdf,python函数大全及使用

    Python的函数都有哪些? Python 函数函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数, ...

  6. python基础--函数

    #python中函数的定义:函数是逻辑结构化和过程化的一种编程方法,用来实现某些特定的功能.#python中函数简单定义的方法# def test(x):# "this is new fun ...

  7. Python 基础 函数

    python 什么是函数 Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用. python 函数的调用 Python内置了很多有用的函数,我们可以直接调用. 要调用一个 ...

  8. Python基础(函数)

    函数就是把具有独立功能的代码块封装成一个小模块,可以直接调用,从而提高代码的编写效率以及重用性, 需要注意的是, 函数需要被调用才会执行, 而调用函数需要根据函数名调用 函数的定义格式: def 函数 ...

  9. 打卡day07 python基础—函数

    def 和 return 是关键字(keyword)python 就是靠识别这些特定的关键字来明白用户的意图 # 1.创建和调用函数 """ 我们创建了一个函数,但是从来 ...

  10. Python基础——函数(二)

    文章目录 函数和过程 函数变量的作用域 局部变量 全局变量 global关键字 内嵌函数(内部函数) 闭包(closure) lambda表达式 两个常用BIF:filter()和map() 函数和过 ...

最新文章

  1. wlop一张多少钱_50etf期权交易一张合约多少钱?
  2. how is table select_all_icon being loaded
  3. 三维重建 几何方法 深度学习_Occupancy Networks:基于学习函数空间的三维重建表示方法...
  4. LeetCode 10. 正则表达式匹配(递归/DP)
  5. ACM MM2018 Best Paper 被华人包揽
  6. 浏览器解析html全过程详解
  7. 电脑护眼模式_电脑手机护眼小工具
  8. 三、解线性方程组的迭代法
  9. jmeter教程https://max.book118.com/html/2019/0108/6145005114002000.shtm
  10. 红外测距模块 51单片机_智能激光测距
  11. Java POI输出excel单元格画斜线
  12. Unity-动画机学习
  13. 自媒体平台数据统计分析爬虫之【趣头条】模拟登陆分析详解及数据统计接口详解
  14. 资产分类计算机软件,固定资产管理系统_资产分类名称(电子计算机及其外围设备篇)...
  15. 携程违反银联禁止记录CVC码的规定 可能面临重罚
  16. 数据挖掘与分析课程笔记(Chapter 7)
  17. 每次用C++(6.3)时utf-8不能显示
  18. H264码流分析工具
  19. java日期排序_java实现日期排序问题
  20. 高清大图~蓝色系治愈壁纸,二次元的水中世界

热门文章

  1. DEAP:使用生理信号进行情绪分析的数据库(一、背景介绍与刺激选择)
  2. JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
  3. 单片机外文参考文献期刊_论文参考文献|如何在最短时间内加注参考文献??...
  4. 商汤首付56亿!上海建成亚洲最大AI“发电厂”,万亿参数大模型训练无压力
  5. 索尼AI CEO:我们要让AI在30年内拿到诺贝尔奖
  6. AI已经会刷LeetCode了
  7. AutoX“真无人”车队驶上繁忙街头,中国正式跨入无人驾驶时代
  8. Fundebug录屏插件更新至0.4.0,修复BUG,优化性能
  9. automake使用说明
  10. CSS实现某元素hover时 所有兄弟节点样式改变