python介绍函数

举报
brucexiaogui 发表于 2021/12/30 00:41:21 2021/12/30
【摘要】 什么是函数 函数可以看做是一个容器,它吧可执行的命令通过一定格式包裹起来,再起个名字。如果有程序调用这个函数的时候,就会触发执行函数中的代码块。 两个概念: 面向过程式编程:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处面向函数式编程:执...

什么是函数

函数可以看做是一个容器,它吧可执行的命令通过一定格式包裹起来,再起个名字。如果有程序调用这个函数的时候,就会触发执行函数中的代码块。

两个概念:

  • 面向过程式编程:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处
  • 面向函数式编程:执行多次重复操作的时候,可以用到函数式编程,可以减少代码重复率

定义函数格式:


  
  1. def 函数名(参数):
  2. 函数体
  3. return()

函数定义要点:

  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算,如:发送邮件,计算出[11,22,38,888,2]中的最大数等….
  • 参数:为函数体提供数据
  • 返回值:为函数执行完毕后,可以调用者返回数据。

执行函数:

函数名() #括号内不加内容的话只执行没有参数的函数。 
函数名(a, b) #如果括号内有参数,则执行有参数的函数

例:


  
  1. def sam(形参):
  2. for i in range(1, 100, 2):
  3. print(i)
  4. return("dsa")
  5. a = sam(实参)

函数的返回值:return

在函数中如果执行return了,函数下的代码就不再执行了 
函数是个功能块,该功能块到底执行成功与否,需要通过返回值来告知调用者。,这个返回值可以定义为任意代码,默认的返回值为None。


  
  1. def sam():
  2. for i in range(1, 100, 2):
  3. print(i)
  4. return("bac")
  5. a = sam()
  6. print(a)

函数的参数:


  
  1. def door(name2): #上面这个参数叫形式参数
  2. if name2 == "eric":
  3. print("开门")
  4. return 1
  5. else:
  6. print("不开")
  7. return 0
  8. num = 0
  9. while True:
  10. name = input("请输入用户名:")
  11. fh = door(name) #这个参数叫实际参数
  12. num += 1
  13. if fh == True:
  14. print("eric开门"+str(num)+"次" )

函数可以上传参数,可以把参数作为判断条件,参数可以是多个。


参数分类

普通参数


  
  1. def fc(a, b, c,):
  2. 函数体
  3. return
  4. fc(1, 2, 3,)

默认,实参与形参的位置是相互对应,数量一致。


  
  1. def fc(a, b, c,):
  2. 函数体
  3. return
  4. fc(b=2, a=1, c=3,)

也可以指定参数位置,这样就不用按顺序排列位置了。

默认参数


  
  1. def fc(a, b, c=3): #添加默认函数时直接在形参后面添加函数
  2. 函数体
  3. return
  4. fc(b=2, a=1, c=5) #如果默认函数位被指定函数后,就会使用指定了的函数

注意: 
默认参数必须在形参的最后一个 
形参里面有几个参数,实参中也要有上传几个参数,即使没用。

动态参数一 
把参数变成元组,根据顺序一个一个写入参数,动态参数可以用一个形式参数表示多个不同类型的实际参数。


  
  1. def fc(*a): #配置动态参数只需在参数前面加一个星号“*”
  2. print(a, type(a))
  3. return
  4. fc("adfa", 123)

动态参数二 
把参数变成字典,需要输入键值对。


  
  1. def fc(**a):
  2. print(a, type(a))
  3. return
  4. fc(kaf="daf", dak="alfd")

各种参数也可以组合起来使用,我们把这种参数称之为万能参数。


  
  1. def fc(a, *b, **c): #一个星的在前面,两个星的在后面
  2. print(a, type(a))
  3. print(b, type(b))
  4. print(c, type(c))
  5. fc(12,14,15,k1=123,k2="bdc")
  6. 12 <class 'int'>
  7. (14, 15) <class 'tuple'>
  8. {'k1': 123, 'k2': 'bdc'} <class 'dict'>

向函数中传入,列表,元组。


  
  1. def fc(*a): #这里用带一个星号的形参就可以了
  2. print(a, type(a))
  3. li = [22, 33, 44,]
  4. tup = (1, 3, 5,)
  5. fc(*li, *tup) #传入变量名前面必须加星号
  6. (22, 33, 44, 1, 3, 5) <class 'tuple'>

这样传入的列表不会把整个列表作为元素

传入字典


  
  1. def fc(**a): #这里要用两个星号的形参
  2. print(a, type(a))
  3. dic = {"k1":"adf","k2":123}
  4. fc(**dic) #实参也要用两个星号
  5. {'k1': 'adf', 'k2': 123} <class 'dict'>

局部变量和全局变量

局部:一段语句,一段功能模块,或者某个用户的环境下 
局部变量:在局部环境创建的变量,只能在局部调用,修改。 
全局变量:将变量定义在代码语句外,所有语句调用都可用。 
在局部环境改变全局变量需要用globle,globle 变量名 
规范:全局变量名用大写,局部变量名用小写。 
这里写图片描述


lambda表达式

简单if语句可以用三元运算表示,简单函数也可以用lambda表达式表示。

格式:


  
  1. 变量名 = lambda 参数,参数 : 函数体(含返回值)
  2. 例子:
  3. f4 = lambda a1,a2 : a1+a2
  4. d = f4(1,5)
  5. print(d)

内置函数

这里写图片描述


  
  1. abs #取绝对值
  2. all #每个元素都为真则为真
  3. 0None,空列表,空字符串,空字典和空元组都是假的,其他的都是真的。
  4. any #真要有一个人则为真
  5. ascii() #在对象类型中找 __repr__,获取其返回值
  6. bool #对象转换成布尔值
  7. bytes #字节
  8. bytearray #字节列表
  9. bytes("alilang", encoding="utf-8") 把字符转换成字节
  10. chr() #接受数字把这个数字代表的字符表示出来,默认使用ascii 显示:chr(112)
  11. ord() #得出字符用什么十进制的数字表示,一次只能接受一个参数,默认使用ascii编码显示:ord("A")
  12. compile #把字符串编译成可执行代码
  13. dir #寻找类里面提供的方法
  14. dict #字典
  15. divmod(103) #取整数和余数
  16. enumrate() #为可迭代的对象添加序号
  17. eval("1+2") #自动把str格式转换成int运算返回格式为int,有返回值
  18. exec() #执行py代码,没有返回值
  19. filter #过滤,循环可迭代的对象,获取每一个参数,函数(参数)
  20. 用法:
  21. def f1(x):
  22. if x > 22:
  23. return True
  24. else:
  25. return False
  26. ret = filter(f1, [11,22,33,44])
  27. for i in ret:
  28. print(i)
  29. 通过lambda表达式也可以达到同样的作用
  30. def f1(x):
  31. return x > 22
  32. ret = filter(lambda x: x > 22, [11,22,33,44])
  33. for i in ret:
  34. print(i)
  35. map() #map与filter函数用法差不多,作用是对每一个可迭代的对象加上指定的书。
  36. globals() #获取当前代码中的所有全局变量
  37. locals() #获取当前代码中所有的局部变量
  38. help() #查看帮助文档
  39. id() #查看代码在内存的id号
  40. input #将输入的内容赋值给一个变量
  41. isinstance() #判断某个对象是否是某个类创建的
  42. issubclass() #判断对象是否为子类
  43. iter() #创建可迭代对象的next
  44. next() #取下一个对象,取的时候要增加next
  45. len() #取对象长度
  46. list() #列表
  47. max() #取对象中的最大值
  48. min() #取对象中的最小值
  49. pow() #求多少幂:i = pow(2, 10)
  50. reversed() #反转
  51. round() #四舍五入
  52. slice() #取对象的索引
  53. sorted() #排序
  54. sum() #求和
  55. zip() #不同列里相同索引的对象组成同一个元组
  56. _import_ #带入模块
  57. 十进制转不同进制的数,在参数内输入十进制数
  58. bin() 二进制
  59. hex() 十六进制
  60. oct() 八进制
  61. int() 十进制
  62. 不同进制的数转十进制,这是一种方式
  63. num = int("0b11", base=2) 二进制转十进制
  64. num = int("0o11", base=8) 八进制转十进制
  65. num = int("0xea", base=16) 十六进制转十进制
  66. 排序:sorted()
  67. 排序只能排列统一的数据类型
  68. p = [1,11,88,2,10,66]
  69. print(sorted(p))
  70. [1, 2, 10, 11, 66, 88] #数字排序从小到大安数字的大小排序
  71. a = ["3","1","?","张","fd","何"]
  72. print(sorted(a))
  73. ['1', '3', '?', 'fd', '何', '张'] #字符排序,按照字符用十进制数表现的大小排序

文件操作:open

  1. 打开文件
  2. 操作文件
  3. 关闭文件

基本模式 
open(文件名, 模式, 编码)

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。用什么模式打开文件,就只能对文件做哪些操作

模式 
r 只读模式(默认) 
w 只写模式(不可读,不存在则创建,存在则清空内容重新创建) 
x 只写模式(也不可读,存不存在则创建,存在则报错) 
a 追加模式(不可读,不存在则创建,存在则只追加内容)

  • 只读模式

  
  1. file = open('sha.txt','r') #文件名可以为是个路径,默认为只读模式
  2. r = file.read() #打开文件
  3. print(r)
  4. file.close() #关闭
  •  
  • 只写模式

  
  1. file1 = open('ben.txt', 'w')
  2. a = file1.write('adixw123') #文件存在则覆盖原有内容,文件不存在则创建
  3. file1.close()
  • x 只写模式

  
  1. file2 = open('sha1.txt', 'x') #文件存在则报错,不存在则创建
  2. file2.write("999999")
  3. file2.close()
  • a 追加模式

  
  1. file3 = open('ben.txt', 'ra') #追加模式不可读
  2. file3.write("aa445")
  3. file3.close()

“b”表示以字节的方式操作 
直接用二进制方式打开,打开不用转码

  • rb 或 r+b
  • wb 或 w + b
  • xb 或 w + b
  • ab 或 a + b

  • rb,以二进制方式打开 
    rb:读的时候是以字节的形式读取的,写入的时候也要通过二进制的方式写入。


  
  1. file = open('ben.txt', 'rb',)
  2. a = file.read()
  3. file.close()
  4. print(str(a, encoding="utf-8")) #用utf-8格式,把输出的二进制转成字符显示
  • wb;xb;ab 三种写入方式格式类似

  
  1. file = open('ben.txt', 'rb',)
  2. a = file.write(bytes("中国", encoding="utf-8"))
  3. file.close()

”+“表示可以同时读写某个文件

  • r+ 读写(在末尾追加)
  • w+ 写读
  • x+ 写读
  • a+ 写读
  • tell() #获取指针位置
  • seek() #改变指针位置

  • r+ :读写,先写再读


  
  1. file = open('ben.txt', 'r+', encoding=('utf-8')) #win默认用gdk格式,linux默认用utf-8格式
  2. d = file.read(1) #指定读取一个字符
  3. print(file.tell())
  4. print(d)
  5. #file.write("中华")
  6. a = file.read(2) #指定读取两个字符
  7. file.write("花花") #写入时指针就到了最后一位
  8. print(file.tell())
  9. file.close()
  10. print(a)
  • w+ :读写,先清空,写完以后才能读

  
  1. file = open('ben.txt', 'w+', encoding='utf-8')
  2. file.write("中华")
  3. file.seek(0) #写入以后指针会到最后一位,seek可以改变指针位置
  4. a = file.read()
  5. file.close()
  6. print(a)
  • x+:与读写格式基本相同,有一点不同如果文件存在则报错

  • a+:与上面的读写差不多,可以追加数据


  
  1. file = open("ben.txt", "a+", encoding="utf-8")
  2. file.write("人民")
  3. file.seek(0)
  4. d = file.read()
  5. file.close()
  6. print(d)

总结:r+:从后向后读;w+:先清空写完之后指针在最后;x+:如果没有文件存在则报错;a+:追加,写完之后指针在最后。


对文件进行操作


  
  1. def close(self, *args, **kwargs): #real signature unknown 关闭文件
  2. pass
  3. def fileno(self, *args, **kwargs): #real signature unknown 文件描述符
  4. pass
  5. def flush(self, *args, **kwargs): 将内存的文件信息写入硬盘
  6. #def isatty(self, *args, **kwargs): 判断文件是否同意tty设备
  7. def read(self, *args, **kwargs): 读取指定字符数据
  8. #def readable(self, *args, **kwargs): 是否可读
  9. def readline(self, *args, **kwargs): 仅读取一行数据
  10. def seek(self, *args, **kwargs): 指定文件中指针位置
  11. #def seekable(self, **args, **kwargs): 指针是否可操作
  12. def truncate(self, *args, **kwargs): 截取数据,仅保留指针之前的数据,依赖于指针
  13. #def writable(self, *args, **kwargs): 是否可写
  14. def write(self, *args, **kwargs): 写内容

读取所有的数据(无论几行几列)


  
  1. f1 = open("ben.txt", "r+", encoding="utf-8")
  2. for line in f1:
  3. print(line)
  •  

自动写入:with 
每次打开一个文件都需要close才能进行下一步操作,如果用上with之后就可以不用每次都关闭了。

格式:


  
  1. with open("ben.txt", "r", "#") as file:
  2. file.read()
  3. ......

Python2.7之后,with同时打开两个文件


  
  1. with open("ben.txt", "r") as file1, open("sha.txt", "r") as file2
  2. ......

实例: 
同时打开两个文件file1的数据复制到file2文件里面,可以进行一下操作。


  
  1. with open("ben.txt", "r+", encoding="utf-8") as file1, open("sha.txt", "w+", encoding="utf-8") as file2:
  2. for line in file1:
  3. file2.write(line)
  4. file2.seek(0)
  5. a = file2.read()
  6. print(a)
转载自:https://blog.csdn.net/ydydyq/article/details/51445510

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/80266858

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。