函数:
一、什么是函数
定义:函数是组织好,可重复使用,用来实现单一,或关联功能的代码段
二、pycharm中的表结构
项目 ,包(init)或目录,py文件,py文件包含多个函数或类等
三、函数的有哪些优点?
1、降低代码冗余
2、增加代码的复用性,提高开发效率
3、提高程序的拓展性
4、封装:就是把代码片段放在函数当中
================================
二、函数的使用
1、自定义函数
2、内置函数
(1)、自定义函数
自己封装的函数
(2)、如何定义一个函数
def
格式:
def 函数名(参数): #定义函数
函数体
函数名( ) #调用函数
案例:
3、调用函数的方法:
(1)第一种:直接调用 函数名()
(2)第二种:mian方法
if __name__ == '__main__': 主函数调用
主函数的解释:
解释:
if __name__ == '__main__': 是函数的入口,也称为主函数
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ ,这句话的
意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,
代码块不被运行
def hs(): print("上海多测师") print("杭州多测师") def hs1(): print("深圳多测师") print("广州多测师") if __name__ == '__main__': hs1() # hs() (3)第三种:调用方法:跨模块调用 a 模块 ,b模块 a文件:
b文件:
调用上一个文件中的函数:
先导入模块中函数:
from 项目名.包名.模块名 import (导入) * (*所有的函数)
=================================================
函数中的参数:
1、函数体中无函数
def hz(): print("dcs") print("hz") hz()
2、函数中有单个参数
def hz(a): print(a) print(a+2) hz(12) 3、函数中有多个参数
def hz(a,b,c): print(a) print(a+b) print(a+b+c) hz(1,2,3) 4、函数定义时带上默认参数 c=18 表示默认参数
def hz(a,b,c=18): print(a) print(a,b) print(a,b,c) hz(1,2)
5、可变长元组
可变长参数中可变长元组“*” ;一个*号
案例1:单独可变长元组使用
def hz(*a): print(a) hz(1,2,3,4,5) 案例2:可变长元组使用和普通参数在一起,只能可变长元组在后,否则报错
def hz(b,*a): print(a) print(b) hz(1,2,3,4,5,8) 6、可变长字典 可变长字段用两个** 表示 案例1:单独传字典:
(1)def zd(**d): print(d) zd(name="zt",age="18")
(2)
def zd(**d): print(d) d={"a":1,"b":2} zd(**d) 案例2:当可变字典和可变元组在一起,可变元组在前,可变字典在后
def zd(*y,**d,): print(y) print(d) d={"a":1,"b":2} zd(111,2,**d) 案例3:普通参数,可变长元组,可变长字典
def zd(p,*y,**d,): print(p) print(y) print(d) d={"a":1,"b":2} zd("a",111,2,**d) ====================================== 变量 函数汇总的变量和作用域 (1)全局变量:在函数内外都可以引用 (2)局部变量:在函数体中定义的变量被称为局部变量 (3)通过局部变量改成成全局变量 1、认识局部变量和全局变量 案例1:
a=10 #全局变量 def s(): a=100 #局部变量 print(a) def c(): print(a) if __name__ == '__main__': s() c() 备注:局部变量和全局变量在一起,局部变量优先级高于全局变量
2、将局部变量改为全局变量 global
a=10 #全局变量 def s(): global a #通过global 将局部变量改为全局变量 a=100 #局部变量 print(a) def c(): print(a) if __name__ == '__main__': s() c()
============================================ return 函数 返回值 (1)
Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值,该返回值可以是任意类型。需要注意的是,return 语句在同一函数中可以出现多次,但只要有一个得到执行,就会直接结束函数的执行。函数中,使用 return 语句的语法格式如下:return [返回值]
其中,返回值参数可以指定,也可以省略不写(将返回空值 None)
(2)
1、在程序开发中,有时候会希望一个函数执行程序结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理。
2、返回值是函数完成工作后,最后给到调用者的一个结果。
3、在函数中使用return关键字可以返回结果。
4、调用函数的一方可以使用变量来接收函数的返回结果。
注意点:return后面的语句不执行
def s(): # global a a=100 #局部变量 return a def c(): k=s() k*=2 print(k) if __name__ == '__main__': s() c() 作业:
需求:登录银行系统并显示余额,有两个功能第一个是登录,第二个是登录后显示余额,先登录然后根据登录是否成功然后是否显示余额。
分析思路:如果想查询到余额,前提必须登录,所以现在我们用两个函数来处理,第一个函数实现登录,第二个函数实现余额查询,调用第一个函数得到的结果给第二个函数,然后第二个函数根据结果进行代码处理。
方法一:
def login (a,b): if a=="jz" and b=="123": print("登录成功") return 0 else: print("失败") return 1 def selec (a): if a==1: print("尚未登录") elif a==0: print("您的余额为0") if __name__ == '__main__': b=login("jz","123") selec(b) 方法二:
def dl(): name=input("请输入用户名:") if name=="zt": print("登录成功") return "登录成功" else: print("登录失败") return "登录失败" def select(): c=dl() if c=="登录成功": print("余额:一个亿") else: print("你就是一个乞丐") if __name__ == '__main__': select() 方法三: return 1或0 ;return Ture 或falsh ,
return "登录成功"
return "登录成功"
def dl(): name=input("请输入用户名:") if name=="zt": print("登录成功") return 1 else: print("登录失败") return 0 def select(): c=dl() if c==1: print("余额:一个亿") else: print("你就是一个乞丐") if __name__ == '__main__': select()
=========================== python内置函数
python内置函数也叫内建函数;python自带的函数
1、format
定义:format()函数是一种格式化字符串的函数 ,该函数增强了字符串格式化的功能。
基本语法:是通过 {} 来代替以前的 %
(1)不设置指定位置,按默认顺序
1.hz="{}".format("dcs","bank") print(hz) 2\
hz="{},{}".format("dcs","bank") print(hz) 3\元组范围超出
hz="{}it{}{}".format("dcs","bank") print(hz)
2、设置指定索引位置输出
hz="{0}it{0}".format("dcs","bank") 备注:索引从0开始 print(hz) 3、设置参数输出
a="姓名:{name},年龄:{age}".format(name="duoceshi",age=18) print(a)
4、对列表进行格式化
a=[1,2,3] #0 b=[4,5,6] #1 print("中奖号码:{0[2]},兑奖号码:{1[1]}".format(a,b)) #a,b 表示两个列表排序 结果:
a=[1,2,3] #0 b=[4,5,6] #1 print("中奖号码:{1[2]},兑奖号码:{0[1]}".format(a,b)) #a,b 表示两个列表排序
备注: 一个表默认0 两个表就是按0,1索引位表示 取值也是按括号内索引位来取值
大括号里面的0代表的是列表、中括号里面的0和1是列表元素对应的索引位
5、对字典进行格式化 "**"表示可变长字典
a={"name":"多测师","url":"www.duoceshi.com","zj":"100w"} b="网站名:{name}, 网站:{url},资金:{zj},品牌:{name}".format(**a) print(b)
============================================ zip函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
(1)zip 压缩
字符类型:<class 'zip'>
案例1:将两个列表转成字典
a=["a","b","c"] b=[4,5,6,7,8] c=zip(a,b) print(type(c)) c=dict(c) print(c) 案例2元组:
a=["a","b","c"] b=[4,5,6,7,8] c=zip(a,b) print(type(c)) c=tuple(c) print(c) 结果: (('a', 4), ('b', 5), ('c', 6))
(2)zip解压 zip(*)
a=["a","b","c","a"] b=[4,5,6,7,8] x,y=zip(*zip(a,b)) print(x) print(y)
============================================ open函数
open() 函数用于打开一个文件,创建一个 file 对象
语法:open(file, mode),模式有r(只读),w(写入覆盖),a(写入追加)
(1)按住ctrl键,鼠标点击open关键字,查看用法
(2)读取python中复制的路径
(3)读取本地文件内容:
案例
url2=r"D:\ls\cms.txt" wj=open(url2,"r",encoding="utf-8") print(wj.read())
(4)'r'读取的三种方式 1、read #读取文件中所有内容返回字符串 案例:
url2=r"D:\ls\cms.txt" wj=open(url2,"r",encoding="utf-8") print(wj.read())
2、readline ##读取文件中第一行内容
url2=r"D:\ls\cms.txt" wj=open(url2,"r",encoding="utf-8") print(wj.readline())
3、readlines ##读取文件中所有内容返回列表
url2=r"D:\ls\cms.txt" wj=open(url2,"r",encoding="utf-8") print(wj.readlines())
================================================ 写入文件
url2=r"D:\ls\cms.txt" wj=open(url2,"w") #打开并写入 wj.write("2022新年好11") #写入内容 wj.close() #关闭文件,释放资源 r=open(url2,"r") print(r.read())
================================================ a追加: 案例:追加的模式:a(写入追加)
url2=r"D:\ls\cms.txt" wj=open(url2,"a") #打开并写入 wj.write("2022大家暴富") #写入内容 wj.close() #关闭文件,释放资源 r=open(url2,"r") print(r.read()) ==========================
open()函数扩展用法
with open("C:\\aa.txt", 'r')as f:
a = f.read()
b = f.readline()
c = f.readlines()
d = f.write()
e = f.writelines()
用with语句的好处,就是到达语句末尾时,会自动关闭文件,即便出现异常
案例1:read()
url2=r"D:\ls\cms.txt" with open (url2,"r") as f: a=f.read() print(a) 案例2:readlines()
url2=r"D:\ls\cms.txt" with open (url2,"r") as f: a=f.readlines() print(a)
案例3:readline()
url2=r"D:\ls\cms.txt" with open (url2,"r") as f: a=f.readline() print(a) =================================== long函数在python3中已删除 len函数: 返回一个内容的长度 语法:len(内容) 内容:字符串,列表,字典,元组等 案例1:计算字符
str="abcde" print(len(str)) #结果:5 案例2:计算列表
list=[1,2,3,4] print(len(list)) 结果:4 案例3:计算字典
d={"name":"zt","age":"18"} print(len(d)) #结果:2 案例4:计算元组
t=(1,2,3,4) print(len(t)) #结果:4
=================================== abs函数 绝对值 案例:
a=-1 print(abs(a)) #结果:1
=================================== sum 函数 求和
print(sum(range(1,101))) ===================================
id 函数返回对象唯一标示,标示是一个整数
a=[1,3] b=[2,5,6] print(id(a)) #1636447642248 print(id(b)) #1636447642312
d={"name":"zt","age":"18"} a=d
c=d.copy()
print(id(a)) #1947478161736 print(id(d)) #1947478161736
print(id(c)) #1510760806800
=================================== min 最小 返回给定参数最小值或传入可迭代对象元素中的最小值 案例1:数字排列
a=[1,2,3,4,5] print(min(a)) 案例2:
str1="abik" print(min(str1))
案例3:数字和字符
str="a0b12kq3p" print(min(str))
=================================== max 返回给定参数的最大值,参数可以为序列。
a=[1,2,3,4,5]
print(max(a)) #5 str="a0b12kq3p" print(max(str)) #q str1="abik" print(max(str1)) #k
=================================== file 函数用于创建一个file对象,它有一个别名叫open()
===================================
help函数的作用: help函数查看函数或模块用途的详细说明 案例:
help("sys")
help("str")
print(help(list))
===================================
dir()函数是查看函数或模块内的操作方法有什么,输出的是方法列表
案例:dir查询一个类或者对象素有属性
print(dir(list)) 结果: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
=================================== float 浮点值,必须在python中将其转换为浮点值
print(float(12)) print(float(126)) print(float("1")) #将字符串转换成浮点数
a=[1,2,3,4,5] print(max(a)) str="a0b12kq3p" print(max(str)) str1="abik" print(max(str1))
重要补充
===========================================
在Python中,if __name__ == '__main__':
是一个常见的代码结构,用于判断一个Python脚本是作为独立的程序运行还是被导入为一个模块。
这里的 __name__
是一个内置变量,它表示当前模块的名字。当Python解释器读取一个源文件时,它会执行所有的代码。如果一个文件(我们称之为模块)被另一个文件导入,那么__name__
的值就会被设置为该模块的名字。但是,如果这个文件是直接运行的,那么__name__
的值就是'__main__'
。
这种结构的主要目的是允许一个Python文件既可以作为脚本独立运行,也可以作为模块被其他脚本导入,而不执行某些代码。
下面是一个简单的例子:
python复制代码
# 文件名:example.py | |
def function_in_module(): | |
print("This is a function in the module.") | |
if __name__ == '__main__': | |
print("This script is being run directly.") | |
function_in_module() | |
else: | |
print("This script is being imported into another module.") |
-
如果你直接运行
example.py
(例如,通过命令行输入python example.py
),输出会是:
复制代码
This script is being run directly. | |
This is a function in the module. |
-
但是,如果你在另一个Python文件中导入
example.py
(例如,通过import example
),输出会是:
复制代码
This script is being imported into another module. |
这种结构使得代码更加模块化,可以更容易地重用和组合。