day23
python之函数
一、函数
1、定义:函数组织好的,可重复使用,用来实现单一,或者功能的代码片段
2、项目、目录或包、模块(py文件)、函数
3、函数的优点:
a、降低代码的冗余
b、增加代码的复用性,提高开发效率
c、提高程序的拓展性
d、封装
4、自定义函数
格式:
def 函数名(变量名):
函数体
函数名() 调用函数
案例:
def hs():
print(1)
hs()
5、函数调用方法
三种:
第一种:直接在本模块调用
def hs1(a):
print(a+5)
hs1(2)
def hs2(a,b):
print(a+5)
print(b+6)
print(a+b)
hs2(2,3)
第二种:main方法 ,叫主函数调用
def hs():
print(1)
if name == 'main': 当前模块运行,导被导入不被运行
hs()
如:
def hs1(a):
print(a+5)
def hs2(a,b):
print(a+5)
print(b+6)
print(a+b)
if name == 'main':
hs1(2)
hs2(2, 3)
解释:
if_name==’main:是函数的入口,也称为主函数
[name是当前模块名,当模块被直接运行时模块名为_main_,这句话的
意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行
第三种调用方法:
跨模块调用函数
案例:
aa模块:
def hs1(a):
print(a+5)
def hs2(a,b):
print(a+5)
print(b+6)
print(a+b)
if name == 'main':
hs1(2)
hs2(2, 3)
bb模块:
from bao.aa import * from 项目名.包名.模块 import * * 所有
hs1(2)
hs2(2,3)
6、函数中的参数
案例:
函数无参数
def hs():
print(1+2)
print(2+3)
函数单个参数
def hs1(a):
print(a+5)
函数有多个参数
def hs2(a,b):
print(a+5)
print(b+6)
函数定义时带上默认参数
def hs3(a,b=10):
print(a+5)
print(b+6)
可变长元组 *变量名
def hs4(a,*b):
print(a+5)
print(b)
可变长字典 ** 字典
def hs5(a,*b,c):
print(a+5)
print(b)
print(c)
if name == 'main':
# hs()
# hs1(2)
# hs4(2,5,6,7,8)
# d={"name":"zs","age":18}
# hs5(2, 5, 6, 7, 8,d)
hs5(2, 5, 6, 7, 8,name="zs",age="18")
三者的顺序: 普通变量,可变长元组,可变长字典
7、函数变量
(1)局部变量:在函数体中定义的变量,被成为局部变量
(2)全局变量:在函数内外都可以引用
(3)通过globla将变量设置成全局变量(globla全部变量要大于函数外的全局变量)
案例:
sum=100
def hs1():
global sum #global 将局部变量设置成全局变量 优先级高与外部全局变量
sum=200
print(sum)
def hs2():
print(sum)
if name == 'main':
hs1() #200
hs2() #200
8、return函数 返回值
(1)
Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值,该返回值可以是任意类型。需要注意的是,return 语句在同一函数中可以出现多次,但只要有一个得到执行,就会直接结束函数的执行。函数中,使用 return 语句的语法格式如下:return [返回值]
其中,返回值参数可以指定,也可以省略不写(将返回空值 None)
(2)
1、在程序开发中,有时候会希望一个函数执行程序结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理。
2、返回值是函数完成工作后,最后给到调用者的一个结果。
3、在函数中使用return关键字可以返回结果。
4、调用函数的一方可以使用变量来接收函数的返回结果。
注意点:return后面的语句不执行
案例:
def hs1(a):
s=a/2
print(s) #打印出来值,不能引用
return s #返回值
def hs2():
c=hs1(100) #变量接受函数1的返回值
print(c*2)
if name == 'main':
# hs1(100)
hs2()
作业:
返回值实战练习
需求:登录银行系统并显示余额,有两个功能第一个是登录,第二个是登录
后显示余额,先登录然后根据登录是否成功然后是否显示余额。
分析思路:如果想查询到余额,前提必须登录,所以现在我们用两个函数来
处理,第一个函数实现登录,第二个函数实现余额查询,调用第一个函数得
到的结果给第二个函数,然后第二个函数根据结果进行代码处理。
9、内置函数
(1)format
函数是一种格式化字符串的函数 ,该函数增强了字符串格式化的功能。
基本语法:是通过 {} 来代替以前的 %
1、
a="{}{}".format("a","b") #不设置指定位置,按默认顺序
print(a)
2、
a="{2}{1}".format("a","b","c") #设置指定索引位置输出
print(a)
3、
a="姓名:{name},年龄{age}".format(name="a",age=19) #设置参数输出
print(a)
4、
对列表进行格式化
案例:
a=['多测师','www.duoceshi.com']
b=['百度','www.baidu.com']
print("公司名称:{0[0]} ,网站:{1[1]}".format(a,b))
5、对字典进行格式化 ""表示可变长字典
案例:
a={"name":"多测师","url":"www.duoceshi.com"}
print("公司名称:{name}, 网站{url}".format(a))
(2)zip 压缩包
a、压缩
a=['name','url',"aa"]
b=['duoceshi','www.duoceshi.cn']
c=zip(a,b) #<class 'zip'>
print(type(c))
print(dict(c))
print(list(c))
print(tuple(c))
b、反解(zip)
a=['name','url',"aa"]
b=['duoceshi','www.duoceshi.cn']
m,n=zip(zip(a,b))
print(m)
print(n)
(3)open函数
open() 函数用于打开一个文件,创建一个 file 对象
语法:open(file, mode),模式有r(只读),w(写入覆盖),a(写入追加)
url="C:\Users\Administrator\PycharmProjects\untitled\bao\aa.py"
注意:路径前+r,或者反斜杠
使用opn函数
r 读
案例:
url=r"C:\Users\Administrator\PycharmProjects\untitled\bao\aa.py"
url1=r"E:\az\ck\mm"
wj=open(url1,"r",encoding="utf-8")
print(wj.read())
print(wj.read()) #读取的内容所有,返回的是字符类型
print(wj.readline()) #取的内容一行
print(wj.readlines()) #读取的内容所有,返回的是列表的类型
w 写
url=r"C:\Users\Administrator\PycharmProjects\untitled\bao\aa.py"
url1=r"E:\az\ck\mm"
wj=open(url1,"w",encoding="utf-8")
print(wj.write("dcs"))
a 追加
url=r"C:\Users\Administrator\PycharmProjects\untitled\bao\aa.py"
url1=r"E:\az\ck\mm"
wj=open(url1,"a",encoding="utf-8")
print(wj.write("hjkj\nzhuijia"))
(4) with open
a
url=r"C:\Users\Administrator\PycharmProjects\untitled\bao\aa.py"
url1=r"E:\az\ck\mm"
with open(url1) as f:
# print(f.read())
# print(f.readlines())
print(f.readline())
拓展:
a=-1
print(abs(a)) #1 绝对值
list1=[1,2,3,6,9]
print(max(list1)) #9 最大数
print(min(list1)) #1 最小数
print(sum(list1)) #求和
print(sum(range(1,101))) #5050
print(len(list1)) #5 计算长度
print(id(list1)) #返回对象唯一表示
print(help(open)) #查看函数模块用途的详细说明
print(float(12)) #12.0 浮点数
print(bin(3)) #0b11 将整数转换成二进制
1、求出1 / 1 + 1 / 3 + 1 / 5……+1 / 99的和 (1分之一+1分之三+1分支5....)
语句1:
total_sum=0
for i in range(1,100,2):
total_sum +=1/i
print(total_sum) #2.937774848474907
语句2:
sum=0
a=1
while a<100:
sum+=1/a
a+=2
print(sum)
2、用循环语句,计算2 - 10之间整数的循环相乘的值 (234*5....10)
语句1:
a=1
for i in range(2,11):
a *=i
print(a)
语句2:
a= 1
i = 2
while i <= 10:
a *= i
i += 1
print(a)
3、用for循环打印九九乘法表
语句1:
print("九九乘法表")
for i in range(1,10):
# print(i)
for j in range(1,i+1):
print(f"{j}{i}={ji}\t", end="")
print()
语句2:
i=1
while i<10:
j=1
while j<=i:
print(j,"x",i,"=",i*j,end="")
j+=1
print( )
i+=1
4、求每个字符串中字符出现的个数如:helloworld
语句1:
s="helloworld"
char_count={}
for char in s:
char_count[char]=char_count.get(char,0)+1
print(char_count)
语句1:
s ="hellowrld"
count = {}
for char in s:
if char in count:
count[char]+=1
else:
count[char]=1
print(count)
语句3:
s ="hellowrld"
for i in set(s):
c=s.count(i)
print(i,":",c)
语句4:
s ="hellowrld"
for i in set(s):
c=s.count(i)
print(i,":",c)
5、实现把字符串str = "duoceshi"中任意字母变为大写(通过输入语句来实现)
语句1:
str = "duoceshi"
s=input("输入字母:")
if s in str:
for i in s:
j=i.upper()
print(str.replace(s,j))
else:
print("字母不存在")
语句2:
str = "duoceshi"
s=input("输入字母:")
str1=str.replace(s,s.upper())
print(str1)
语句3:
s = "duoceshi"
target_char = input("请输入要转为大写的字母:")
if len(target_char) != 1:
print("请只输入一个字母!")
else:
new_str = s.replace(target_char, target_char.upper())
print("修改后字符串:", new_str)
6、分别打印100以内的所有偶数和奇数并存入不同的列表当中
语句1:
odd_list=[]
even_list=[]
for i in range(100):
if i % 2 ==0:
even_list.append(i)
else:
odd_list.append(i)
print(f"偶数:{even_list};"
f"奇数:{odd_list}")
语句2:
a=list(range(1,100,2))
b=list(range(0,100,2))
print(a)
print(b)
语句3:
j=[]
o=[]
a=-1
b=0
while a<100:
a+=2
j.append(a)
print(j)
while b<100:
b+=2
o.append(b)
print(o)
7、请写一段Python代码实现删除一个重复的数,list = [1, 3, 6, 9, 1, 8]#去重
语句1:set方法
a=[1,3,6,9,1,8]
b=list(set(a))
print(b)
语句2: not in
list = [1, 3, 6, 9, 1, 8]
new_list = []
for num in list:
if num not in new_list:
new_list.append(num)
print("去重后:", new_list)
语句3:
lis = [1, 3, 6, 9, 1, 8]
for i in lis:
if lis.count(i)>1:
lis.remove(i)
print(lis)
语句4:
a = [1,3,6,9,1,8]
b = [a[i] for i in range(len(a)) if a.index(a[i]) == i]
print(b)
语句5:
a = [1,3,6,9,1,8]
d={}
for i in a:
if i in d:
d[i]=d[i]+1
else:
d[i]=1
print(list(d.keys()))
语句5:字典键唯一向
a = [1,3,6,9,1,8]
c=dict.fromkeys(a)
print(list(c))
8、将字符串类似:"k:1|k3:2|k2:9" 处理成key:value或json格式,比如{"k": "1", "k3": "2"}
语句1:
str1="k:1|k1:2|k2:3|k3:4"
list1=str1.split("|")
print(list1) #['k:1', 'k1:2', 'k2:3', 'k3:4']
d={}
for i in list1:
c=i.split('😂
print(c)
d[c[0]]=c[1]
print(d) #{'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'}
语句2:
s = "k:1|k3:2|k2:9"
qq= {}
items = s.split("|")
for item in items:
k, v = item.split("😊
qq[k] = v
print(qq)
9、把字符串user_controller转换为驼峰命名UserController大驼峰在java用作变量命名
(前英文为大写后英文为小写) 小驼峰:作为变量命名
小驼峰:第一个单词小写,后续每个字母大写
如:userController
大驼峰:每个单词首字母大写,无下划线,直接拼接
UserController
语句1:
s = "user_controller"
words = s.split('')
a = ''.join(word.capitalize() for word in words)
print(a)
语句2:
str1 = "user_controller"
s=str1.split("")
print(s)
str2=""
for i in s:
str2=str2+str(i).capitalize()
print(str2)
语句3:
str1 = "user_controller"
s=str1.split("")
print(s[0].capitalize()+s[1].capitalize())
语句4:
str1 = "user_controller"
s=str1.split("")
print(s[0].title()+s[1].title())
10、给一组无规律的数据从大到小或从小到大进行排序如:list = [2, 6, 9, 10, 18, 15, 1]
语句1:sort
list = [2, 6, 9, 10, 18, 15, 1]
list.sort()
print(list)
语句2:sorted
list = [2, 6, 9, 10, 18, 15, 1]
asc = sorted(list,reverse=False)
desc = sorted(list, reverse=True)
print(f" 升序: {asc}, 降序: {desc}")
语句3:冒泡排序排(相邻的两个元素比较,如果前面比后面大,就交换位置)
list = [2, 6, 9, 10, 18, 15, 1]
for i in range(0,len(list)-1):
for j in range(0,len(list)-1-i):
if list[j]>list[j+1]:
list[j],list[j+1]=list[j+1],list[j]
print(list)
11、分析以下数字的规律, 1 1 2 3 5 8 13 21 34用Python语言编程实现输出
分析题目:根据规律 1+1=2 2+1=3 2+3=5 3+5=8....
此为斐波那契数列 (考试题非常多次题目)
题目:
兔子的繁殖问题:如果一开始有一对兔子,它们每月生育一对兔子,小兔在出生后一个月又开始生育且繁殖情况与最初的那对兔子一样,那么一年后有多少对兔子?
答案是,每月兔子的总数可以用以下数列表示:1,1,2,3,5,8,13,21,34,55,89,144,233…
语句:
list=[1,1]
for i in range(10):
list.append(list[-1]+list[-2])
print(list)
方法2:
a, b = 1, 1
print(a, end=" ")
print(b, end=" ")
for _ in range(7):
c = a + b
print(c, end=" ")
a = b
b = c
方法3:
list2=[]
for i in range(10):
if i0 or i1:
list2.append(1)
else:
list2.append(list2[-1]+list2[-2])
print(list2)
语法4:
a=int(input("输入项数:"))
fib = []
i, j = 1, 1
for _ in range(a):
fib.append(i)
i, j = j, i + j
print(fib)
12、如有两个list:a =['a','b','c','d','e']
b =[1,2,3,4,5] 将a中的元素作为key b中的元素作为value,将a,b合并为字典
13、有如下列表,统计列表中的字符串出现的次数
a = ['apple','banana','apple','tomao','orange','apple','banana','watermeton']
语句1:
s = ['apple','banana','apple','tomao','orange','apple','banana','watermeton']
char_count={}
for char in s:
char_count[char]=char_count.get(char,0)+1
print(char_count)
语句2:
s = ['apple','banana','apple','tomao','orange','apple','banana','watermeton']
for i in set(s):
c=s.count(i)
print(i,":",c)
14、列表推导式求出列表所有奇数并构造新列表 a =[1,2,3,4,5,6,7,8,9,10]
语句1:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list1 = []
for num in a:
if num % 2 == 1:
list1.append(num)
print(list1)
语句2:
a =[1,2,3,4,5,6,7,8,9,10]
odd_list = [x for x in a if x % 2 != 0]
print(odd_list)
15、有如下url地址, 要求实现截取出"?"号后面的参数, 并将参数以"key value"的键值形式保存起来, 并最终通过#get(key)的方式取出对应的value值。
url地址如下:http://ip:port/extername/get_account_trade_record.json?page_size=20&page_index=1&user_id=203317&trade_type=0"
python之模块
一、模块的介绍组织python
1、python模块,是一个python文件,一个.py文件,包含了python对象定义和poytho语句
2、模块能够有逻辑的组织代码
3、把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
4、模块能定义函数,类和变量,模块里也能包含可执行的代码。
二、模块的导入
1、import 模块名
格式:模块名.函数
案例:
import time #导入time模块
print(1)
time.sleep(10) #休眠
print(2)
2、导入所有的函数
from 模块名 import * 所有的函数
案例:
from time import * #from 模块名 import * 所有的函数
print(1)
sleep(10) #休眠 #函数名
print(ctime()) #显示当前时间
print(2)
3、指定函数导入
格式:
from 模块名 import 指定函数
from time import ctime #from 模块名 import 指定函数
print(1)
sleep(10) #休眠 #函数名
print(ctime()) #显示当前时间
print(2)
4、通过取别名来调用函数
格式:
from 包名.模块名 import 函数名 as 别名
p()
aa文件:
from bao.bb import hs as p
p()
bb文件:
def hs():
print(1)
def hs2():
print(2)
注意:
1、一个py文件中,一个模块主要导入一次,不管执行多少次,主要导入一次就ok
2、模块不调用时是置灰状态
三、模块的详解
1、time模块
案例2:
import time
print(time.time()) #1760580583.2631614 1970到现在的时间
print(time.ctime()) #Thu Oct 16 10:09:59 2025 固ti定格式显示当前时间
time.sleep(2) #休眠 ,括号内是秒数
print(time.asctime()) ##转换为asc码显示当前时间 Thu Oct 16 10:11:58 2025
print(time.strftime(" %y-%m-%d %H-%M-%S ")) #时间戳 按照格式输出时间
案例2:
from time import *
print(time()) #1760580583.2631614 1970到现在的时间
print(ctime()) #Thu Oct 16 10:09:59 2025 固ti定格式显示当前时间
sleep(2) #休眠 ,括号内是秒数
print(asctime()) ##转换为asc码显示当前时间 Thu Oct 16 10:11:58 2025
print(strftime(" %y-%m-%d %H-%M-%S ")) #时间戳 按照格式输出时间
2、random模块
生成随机浮点数、整数、字符串,从一组数据中选择数据,打乱数据
案例:
import random
print(random.random()) #0.5409081269951179 ##该方法是生成0-1之间的浮点数,但是能取到0,但是取不到1
print(random.randint(1,100))#生成指定范围内整数,包括开始和结束值
print(random.randrange(1,2)) ##生成指定范围内的数,包含开始值,不包含结束值
print(random.randrange(1,10,2))#生成指定范围内的奇数,不包括结束值
print(random.randrange(0,10,2))#生成指定范围内的偶数,不包括结束值
list1=[1,2,3,4,5,"a"]
print(random.sample(list1,3)) #选择n个随机且独立的元素
print(random.choice(list1)) ##生成随机字符
random.shuffle(list1) # #洗牌(随机数列)
print(list1)
3、string模块
import string
print(string.digits) #0123456789
print(string.hexdigits) #0123456789abcdefABCDEF
print(string.ascii_letters) #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.ascii_lowercase) #abcdefghijklmnopqrstuvwxyz
print(string.ascii_uppercase) #ABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits+string.ascii_letters) #0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
加密模块
(1)base64加解密
import base64 #导入base64 加密模块
a=base64.b64encode(b"123456") #加密 b 二进制 密码
print(a) # b'MTIzNDU2'
b=base64.b64decode(b'MTIzNDU2')
print(b) #b'123456'
(2)md5加密,现在在hashlib模块
a、定义:md5是一种算法,可以将一个字符、文件,md5后可以生成一个固定为128bit的串,这个字符串唯一
b、python将md5归纳道hash 种
c、md5是可以将任意长度的输入,通过hash算法变成固定长度的输出,改输出就是散列值,也称摘要值,该算法就是哈希函数,也称摘要函数
import hashlib
m=hashlib.md5() #创建md5的对象
m.update(b"123456") #加密
print(m.hexdigest()) #e10adc3949ba59abbe56e057f20f883e #返回16进制的字符串
面试题:
1、如果工作种有很多数据,如果数据被改动,或传递修改后,看不出?
(1)通过加密检查数据
通过加密对数据进行加密处理,生成加密字符,如果有改动,字符就不相同
(2)比对数据不一样,加密字符就不同,说明数据有问题
import os
url1=r"C:\Users\Administrator\PycharmProjects\untitled\bao\a12.py"
url2=r"C:\Users\Administrator\PycharmProjects\untitled\bao"
url3=r"C:\Users\Administrator\PycharmProjects\untitled\bao\awww.py"
url4=r"C:\Users\Administrator\PycharmProjects\untitled\bao22"
url5=r"C:\Users\Administrator\PycharmProjects\untitled\bao33"
url6=r"C:\Users\Administrator\PycharmProjects\untitled\bao\a11.py"
print(os.getcwd()) #获取相对路径C:\Users\Administrator\PycharmProjects\untitled\bao
print(os.path.isfile(url1)) #True 判断是否存在文档
print(os.path.isfile(url2)) #False 判断是否存在文档
print(os.path.isdir(url1)) #False 判断是否存在目录
print(os.path.isdir(url2)) #True 判断是否存在目录
print(os.path.exists(url1)) #True 判断文文件或目录是否存在
print(os.path.exists(url3)) #False 判断文文件或目录是否存在
print(os.path.split(url1)) #分割文件名和目录 #('C:\Users\Administrator\PycharmProjects\untitled\bao', 'a12.py')
print(os.listdir(url2)) #列出指定目录下所有的目录和文件
print(os.path.join(url2,"a88.py")) #拼接路径
os.mkdir(url4) #创建目录
os.rename(url4,url5) 修改名称
os.remove(url6) #删除文档
浙公网安备 33010602011771号