python函数学习(5)

1.函数返回值:

1)一个函数,不管是否有return,它都有返回值的,如果没有return,它的返回值是None

2)如果有return,函数的返回值是return后面的内容,切记:return后面的代码是不能够执行的。

3)函数返回值的价值是:把函数与函数能够建立一层关联关系。

登录互联网产品之后,会创建一个sessionid,如果sessionid与登录的该账户的sessionid一致就会显示个人主页面。

以知乎登录为例:

def zhihulogin(username='lm',password='admin'):  #登录知乎,账号和秘密已定义
    if username=='lm' and password=='admin':    
        return 'we456ertre'
    else:
        return'账户或密码错误'

def profile(session_id):   #定义另一个函数
    if session_id=='we456ertre':   #如果session-id与登录的session_id一致
print('欢迎查看知乎主页')
else:
      print('请登录') 
profile(session_id
=zhihulogin())

 

2.内部函数

1.chr数字转字母,数字范围是97-122,对应26个字母,其他出现的是特殊字符

ord字母转数字

 

2.range里面指定一个范围输出数字,包含开始不包含结尾

需要与for...in...循环一起使用

例如:range(1,5)输出的就是1,2,3,4

           range(4),输出的就是0,1,2,3

3.内部库,随机输出一个数字

库都是需要导入的,导入的关键字的import,random随机的

 

实例:验证码是如何随机生成的?

import random   #导入数字
list1=[]        #新建一个列表list1
for i in range(4):   #循环输出4个数字
    r=random.randrange(97,120)  #r随机生成1个数字
    list1.append(chr(r))    #将随机生成的4个数字转为字母,放进列表list1中
print(''.join(list1))    #输出,将列表转为字符串

 

4.eval:字符串转为表达式

5.lambda:匿名函数

指的是它是一个函数,但是这个函数的名称可以是自定义的

6.过滤函数filter()

普通方式过滤出列表中大于2的数字

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2=[]
def func():
for item in list1:
if item>2:
list2.append(item)
print(list2)
func()

使用过滤函数filter()
1.函数对象,但是没有()
2.可迭代的对象(可以被循环)
print(list(filter(func,list1)))#过滤出List1中大于2的数字
print(list(filter(lambda x:x>2,list1)))#使用lambda函数自定义,list强制数据转换

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(a):#定义一个函数,函数的形参为a
    if a>2:  #如果a>2
        return True   #则结果为对
print(list(filter(func,list1)))  #输出过滤之后list1中的数字
print(list(filter(lambda  x:x>2,list1)))  #第2种方法使用过滤函数filter和lambda函数自定义相结合,list是强制数据转换

  

7.map:针对所有对象做同样的操作

1.函数对象

2.可迭代的对象

需求:将列表中所有值+10

以下还是常规操作和使用map函数的对比

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2=[]
def func():
    for item in list1:
        list2.append(item+10)
    print(list2)
func()
print(
    list(map(lambda a:a+10,list1))
)

 

 8.Python format 格式化函数

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过 {} 和 : 来代替以前的 % 。

format 函数可以接受不限个参数,位置可以不按顺序。

print("网站名:{name}, 地址 {url}".format(name="淘宝", url="www.taobao.com"))
# 通过字典设置参数
site = {"name": "lm", "age": "20"}
print("姓名:{name}, 年龄 {age}".format(**site))

 

 函数案例实战:

使用函数模拟注册,登录,进入主页面,退出四个步骤操作

import json   #导入json函数
import sys    #导入sys函数
class Stack(object):#定义一个类
   def out(self):
      username = input('请输入账户:\n')
      password = input('请输入密码:\n')
      return username, password

   def register(self):#注册
      username,password=self.out()
      temp=username+','+password
      json.dump(temp,open('data.txt','w'))   #将username和password写进data.txt文档中
def login(self):#登录 username,password
=self.out() # with open('data.txt', 'r') as f: # lists=f.read().split(',') lists=str(json.load(open('data.txt','r'))).split(',')#使用json将文件反序列化读取 if username==lists[0] and password==lists[1]: #如果username等于lists列表当中的第一个元素,password等于lists列表中的第二个元素 return'登陆成功' else: return'请输入正确的用户名和密码' def profile(self):#查看个人主页 with open('data.txt','r')as f: lists=f.read().split(',') print('欢迎{0}访问主页'.format(lists[0].replace('"',''))) def exit(self):#退出 sys.exit(1) def main(self): while True: try: f=int(input('1.注册 2.登录 3.主页 4.退出\n')) if f==1: self.register() elif f==2: print(self.login()) elif f==3: self.profile() elif f==4: self.exit() else:continue except Exception as e:continue if __name__ == '__main__':#统一函数执行入口 obj=Stack() obj.main()

 

 

 

 

 

 

 

 

 

 

3.全局变量与局部变量

优先级:

1.在python文件中,调用变量,全局变量优于局部变量
2.在函数内部调用变量,局部变量的优先级高于全局变量

 

 3.如果在函数内部想引用全局变量,那么使用的关键字是global

 

 

4.异常处理

异常的父类是BaseException
try:
expect:
else:
finally:
异常顺序:
1.正常逻辑:try-->else-->finally
2.异常逻辑:try-->except-->finally

 

 

异常逻辑,expect捕获异常,打印输出异常结果,如果程序中写了两个except,只有一个错误,则打印输出第一个捕获到的错误信息

e.args[0]是原生代码,可以自行修改和定义,例如”分母不能为0“

 

 正常逻辑:

 

 实例:学生成绩只能输入数字,输入字母就会报错,使用异常处理改造之后程序都可以正常运行

 

 输出结果:

 

 

5.模块和包

1.在python中,每一个Python文件都是一个模块(module)

2.包:在一个包里面有很多的模块

3.包与文件夹的区别:包是Python package里面有 _ init _.py文件,文件夹没有

例如 在testDev里创建一个login的包:(包的图标有个洞,文件夹没有)

 

 文件夹:Directory

 

 

一个模块调用另外一个模块文件的变量以及函数
from packages.module import *(代表所有)
首先创建一个login的包,在login的包下创建一个模块f1.py,
再从另外一个模块导入之前的模块里的内容

 

 

 

posted @ 2022-03-30 17:11  lm970418  阅读(59)  评论(0编辑  收藏  举报