python介绍函数

网友投稿 515 2022-05-29

什么是函数

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

两个概念:

面向过程式编程:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处

面向函数式编程:执行多次重复操作的时候,可以用到函数式编程,可以减少代码重复率

定义函数格式:

def 函数名(参数):

函数体

return()

函数定义要点:

def:表示函数的关键字

函数名:函数的名称,日后根据函数名调用函数

函数体:函数中进行一系列的逻辑计算,如:发送邮件,计算出[11,22,38,888,2]中的最大数等….

参数:为函数体提供数据

返回值:为函数执行完毕后,可以调用者返回数据。

执行函数:

函数名() #括号内不加内容的话只执行没有参数的函数。

函数名(a, b) #如果括号内有参数,则执行有参数的函数

例:

def sam(形参):

for i in range(1, 100, 2):

print(i)

return("dsa")

a = sam(实参)

函数的返回值:return

在函数中如果执行return了,函数下的代码就不再执行了

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

def sam():

for i in range(1, 100, 2):

print(i)

return("bac")

a = sam()

print(a)

函数的参数:

def door(name2): #上面这个参数叫形式参数

if name2 == "eric":

print("开门")

return 1

else:

print("不开")

return 0

num = 0

while True:

name = input("请输入用户名:")

fh = door(name) #这个参数叫实际参数

num += 1

if fh == True:

print("eric开门"+str(num)+"次" )

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

参数分类

普通参数

def fc(a, b, c,):

函数体

return

fc(1, 2, 3,)

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

def fc(a, b, c,):

函数体

return

fc(b=2, a=1, c=3,)

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

默认参数

def fc(a, b, c=3): #添加默认函数时直接在形参后面添加函数

函数体

return

fc(b=2, a=1, c=5) #如果默认函数位被指定函数后,就会使用指定了的函数

注意:

默认参数必须在形参的最后一个

形参里面有几个参数,实参中也要有上传几个参数,即使没用。

动态参数一

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

def fc(*a): #配置动态参数只需在参数前面加一个星号“*”

print(a, type(a))

return

fc("adfa", 123)

动态参数二

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

def fc(**a):

print(a, type(a))

return

fc(kaf="daf", dak="alfd")

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

def fc(a, *b, **c): #一个星的在前面,两个星的在后面

print(a, type(a))

print(b, type(b))

print(c, type(c))

fc(12,14,15,k1=123,k2="bdc")

12

(14, 15)

{'k1': 123, 'k2': 'bdc'}

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

def fc(*a): #这里用带一个星号的形参就可以了

print(a, type(a))

li = [22, 33, 44,]

tup = (1, 3, 5,)

fc(*li, *tup) #传入变量名前面必须加星号

(22, 33, 44, 1, 3, 5)

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

传入字典

def fc(**a): #这里要用两个星号的形参

print(a, type(a))

dic = {"k1":"adf","k2":123}

fc(**dic) #实参也要用两个星号

{'k1': 'adf', 'k2': 123}

局部变量和全局变量

局部:一段语句,一段功能模块,或者某个用户的环境下

局部变量:在局部环境创建的变量,只能在局部调用,修改。

全局变量:将变量定义在代码语句外,所有语句调用都可用。

在局部环境改变全局变量需要用globle,globle 变量名

规范:全局变量名用大写,局部变量名用小写。

lambda表达式

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

格式:

变量名 = lambda 参数,参数 : 函数体(含返回值)

例子:

f4 = lambda a1,a2 : a1+a2

d = f4(1,5)

print(d)

内置函数

abs #取绝对值

all #每个元素都为真则为真

0,None,空列表,空字符串,空字典和空元组都是假的,其他的都是真的。

any #真要有一个人则为真

ascii() #在对象类型中找 __repr__,获取其返回值

bool #对象转换成布尔值

bytes #字节

bytearray #字节列表

bytes("alilang", encoding="utf-8") 把字符转换成字节

chr() #接受数字把这个数字代表的字符表示出来,默认使用ascii 显示:chr(112)

ord() #得出字符用什么十进制的数字表示,一次只能接受一个参数,默认使用ascii编码显示:ord("A")

compile #把字符串编译成可执行代码

dir #寻找类里面提供的方法

dict #字典

divmod(10,3) #取整数和余数

enumrate() #为可迭代的对象添加序号

eval("1+2") #自动把str格式转换成int运算返回格式为int,有返回值

exec() #执行py代码,没有返回值

filter #过滤,循环可迭代的对象,获取每一个参数,函数(参数)

用法:

def f1(x):

if x > 22:

return True

else:

return False

ret = filter(f1, [11,22,33,44])

for i in ret:

print(i)

通过lambda表达式也可以达到同样的作用

def f1(x):

return x > 22

ret = filter(lambda x: x > 22, [11,22,33,44])

for i in ret:

print(i)

map() #map与filter函数用法差不多,作用是对每一个可迭代的对象加上指定的书。

globals() #获取当前代码中的所有全局变量

locals() #获取当前代码中所有的局部变量

help() #查看帮助文档

id() #查看代码在内存的id号

input #将输入的内容赋值给一个变量

isinstance() #判断某个对象是否是某个类创建的

issubclass() #判断对象是否为子类

iter() #创建可迭代对象的next

next() #取下一个对象,取的时候要增加next

len() #取对象长度

list() #列表

max() #取对象中的最大值

min() #取对象中的最小值

pow() #求多少幂:i = pow(2, 10)

reversed() #反转

round() #四舍五入

slice() #取对象的索引

sorted() #排序

sum() #求和

zip() #不同列里相同索引的对象组成同一个元组

_import_ #带入模块

十进制转不同进制的数,在参数内输入十进制数

bin() 二进制

hex() 十六进制

oct() 八进制

int() 十进制

不同进制的数转十进制,这是一种方式

num = int("0b11", base=2) 二进制转十进制

num = int("0o11", base=8) 八进制转十进制

num = int("0xea", base=16) 十六进制转十进制

排序:sorted()

排序只能排列统一的数据类型

p = [1,11,88,2,10,66]

print(sorted(p))

[1, 2, 10, 11, 66, 88] #数字排序从小到大安数字的大小排序

a = ["3","1","?","张","fd","何"]

print(sorted(a))

['1', '3', '?', 'fd', '何', '张'] #字符排序,按照字符用十进制数表现的大小排序

文件操作:open

打开文件

操作文件

关闭文件

基本模式

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

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

模式

r 只读模式(默认)

w 只写模式(不可读,不存在则创建,存在则清空内容重新创建)

x 只写模式(也不可读,存不存在则创建,存在则报错)

a 追加模式(不可读,不存在则创建,存在则只追加内容)

只读模式

file = open('sha.txt','r') #文件名可以为是个路径,默认为只读模式

r = file.read() #打开文件

print(r)

file.close() #关闭

只写模式

file1 = open('ben.txt', 'w')

a = file1.write('adixw123') #文件存在则覆盖原有内容,文件不存在则创建

file1.close()

x 只写模式

file2 = open('sha1.txt', 'x') #文件存在则报错,不存在则创建

file2.write("999999")

file2.close()

a 追加模式

file3 = open('ben.txt', 'ra') #追加模式不可读

file3.write("aa445")

file3.close()

“b”表示以字节的方式操作

直接用二进制方式打开,打开不用转码

rb 或 r+b

wb 或 w + b

xb 或 w + b

python介绍函数

ab 或 a + b

rb,以二进制方式打开

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

file = open('ben.txt', 'rb',)

a = file.read()

file.close()

print(str(a, encoding="utf-8")) #用utf-8格式,把输出的二进制转成字符显示

wb;xb;ab 三种写入方式格式类似

file = open('ben.txt', 'rb',)

a = file.write(bytes("中国", encoding="utf-8"))

file.close()

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

r+ 读写(在末尾追加)

w+ 写读

x+ 写读

a+ 写读

tell() #获取指针位置

seek() #改变指针位置

r+ :读写,先写再读

file = open('ben.txt', 'r+', encoding=('utf-8')) #win默认用gdk格式,linux默认用utf-8格式

d = file.read(1) #指定读取一个字符

print(file.tell())

print(d)

#file.write("中华")

a = file.read(2) #指定读取两个字符

file.write("花花") #写入时指针就到了最后一位

print(file.tell())

file.close()

print(a)

w+ :读写,先清空,写完以后才能读

file = open('ben.txt', 'w+', encoding='utf-8')

file.write("中华")

file.seek(0) #写入以后指针会到最后一位,seek可以改变指针位置

a = file.read()

file.close()

print(a)

x+:与读写格式基本相同,有一点不同如果文件存在则报错

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

file = open("ben.txt", "a+", encoding="utf-8")

file.write("人民")

file.seek(0)

d = file.read()

file.close()

print(d)

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

对文件进行操作

def close(self, *args, **kwargs): #real signature unknown 关闭文件

pass

def fileno(self, *args, **kwargs): #real signature unknown 文件描述符

pass

def flush(self, *args, **kwargs): 将内存的文件信息写入硬盘

#def isatty(self, *args, **kwargs): 判断文件是否同意tty设备

def read(self, *args, **kwargs): 读取指定字符数据

#def readable(self, *args, **kwargs): 是否可读

def readline(self, *args, **kwargs): 仅读取一行数据

def seek(self, *args, **kwargs): 指定文件中指针位置

#def seekable(self, **args, **kwargs): 指针是否可操作

def truncate(self, *args, **kwargs): 截取数据,仅保留指针之前的数据,依赖于指针

#def writable(self, *args, **kwargs): 是否可写

def write(self, *args, **kwargs): 写内容

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

f1 = open("ben.txt", "r+", encoding="utf-8")

for line in f1:

print(line)

自动写入:with

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

格式:

with open("ben.txt", "r", "#") as file:

file.read()

......

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

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

......

实例:

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

with open("ben.txt", "r+", encoding="utf-8") as file1, open("sha.txt", "w+", encoding="utf-8") as file2:

for line in file1:

file2.write(line)

file2.seek(0)

a = file2.read()

print(a)

Python 面向对象编程

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python向左,数学向右:乌拉姆的素数研究
下一篇:275_DBA_子查询优化
相关文章