那些年忘掉的Python基础(二)

函数:封装功能!代码重用性

自定义函数

内置函数

一. 自定义

步骤

1.def关键字+函数名。
2.()参数:提供数据。
3.函数体:逻辑计算。只有当调用时才会执行。
4.返回值:当函数执行完毕后,给调用者返回数据。判断功能执行成功与否,默认为None。

返回值

1.查看执行流程:断点之后用Debug运行。
python中从上到下解释。先定义再执行。
2.返回值判断异常解析

def f1():
   try:
        #函数体
   except:
        return False#异常
   else:
        return True #正常
ret=f1()
print(ret)
if ret==Falseprint()
elseprint()
#**当执行到返回值时函数执行过程立即终止**
def f2():
   print(1)
   return(0)
   print(2)
ret=f2()
f2()
print(ret)

参数:函数中的不同值

基本参数

1.普通参数:可接受多个参数,且默认顺序赋值。

def car(xx): #形参:
        #函数体
ret=car(blue)#实参 blue=xx
    

2.指定参数:形参实参位置变换

def discribe_cat(yy,zz):
    print(yy,zz)
    return True
discribe_cat(zz="white",yy="miky" )

3.默认参数:必须放在形参后边

def discribe_car(yy,zz="blue"):
    print (yy,zz)
    return True

动态参数:接受任意个实参

1.*:将传入的所有参数(任意类型,个数)作元素添加到元组中。(按照顺序)

def f3(*args):
    print(args,type(args))
f3(1,2,3,'apple','banbana')
list=[1,2,3,]
f3(list,6)#将列表作为一个元素传入元组
f3(*list,6) #将列表中的每一个元素都作为元组元素
str='ymmk'
f3(*str)#将字符串的每一个元素作为元组元素
#*可以看作是一个for循环

在这里插入图片描述
2.**:将传入的所有参数(任意类型,个数)当作元素添加到字典中。(可改变顺序)

ef f4(**kwargs):
     print(kwaegs,type(kwargs))
f4(k1="name",v1="ymmk")   #将k1与v1组成的键值对放入动态参数中
dic={'k1':'v1','k2':'v2'}
f4(k3=dic)     #键值对放入字典。此时字典中只有一个元素
f4(**dic)    #将dic中每一个元素都放入动态参数中

在这里插入图片描述

特殊参数:自动封装元组和字典

def f5(*args,**kwargs):
    print(args)
    print(kwargs)
f5(1,2,3,4,k1='vl',k2='v2')

*在前面 **在后面

字符串的格式化输出
#str.format()
message='hello {0},i am {1}'
message2='hello {0},i am {1}'.format(*['ymmk','nike'])
message3='hello {name},i am {age}'.format(name='ymmk',age=19)#直接传入可换顺序的键值对
dic={"name":'ymmk',"age":19}
message4='hello {name},i am {age}'.format(**dic)#传入字典
print(message)
print(message2)
print(message3)
print(message4)

在这里插入图片描述

探究函数的参数进行传递时传什么?

def f7(yy):
    yy.append(1)
list=[1,2,3,4] #list先指向[1,2,3,4]
f7(list)       #list指向yy.append
print(list)

在这里插入图片描述
如果传递参数是复制原值并重新创建值的话,那么输出结果为[1,2,3,4,]
如果传递参数时传递的是引用,那么输出结果为[1,2,3,4,1]

变量

1.局部变量:只有本函数内部可用

def f8():
    name='ymmk' 
    print(name)
f8()
def f9():
    print(name)
f9()

全局变量:所有得函数作用域都可读。

NAME='ymmk'
def f10():
    print(NAME)
f10()
def f11():
    global NAME #name已经是全局变量,对全局变量经行重新赋值
    NAME='abcd'
    print(NAME)
f11()

在这里插入图片描述
当list.dec.作为全局变量时,可以添加或删减元素,但是不能重新赋值。

二.用自定义函数实现用户登录与注册系统

#coding=gbk


def login(username,password):
    """
    用户登录
    :param username: 用户名
    :param password: 密码
    :return: Ture:表示登陆成功;False:登陆失败
    """
    f=open("userid",'r')
    for line in f:                #一行一行的读取数据
        list=line.split("|")
        if list[0]==username and list[1]==password:
           return True
    return False #如果一行错误整个登陆系统退出


def register(username,password):
    """
    用户注册
    :param username:用户名
    :param password: 密码
    :return: None
    '''
"""
    f=open("userid",'a')   #打开可写文件
    temp="\n"+username+"|"+password #注册用户名和密码
    f.write(temp) #写入文件
    f.close()#关闭文件


def main():
    i=input("0:Log in  ; 1:sign up")
    if i=='0':
        user=input("用户名")
        pwd=input("密码")
        r=login(user,pwd)
        if r:
            print('登陆成功')
        else:
            print('登陆失败')
    elif i=='1':
       user = input("用户名")
       pwd = input("密码")
       register(user,pwd)

main()

在这里插入图片描述
在这里插入图片描述

三. 用内置函数实现随机验证码组件

import random
list=[]                     #创建一个新列表
for i in range(4):
    r=random.randrange(0,5)   #另2位置随机出现在4次循环
    if r==2:
        num=random.randrange(0,10) #出现0-9内的随机数
        list.append(str(num))  
    else:
        temp = random.randrange(65, 91)
        x=chr(temp)             #随机转换ASCII码
        list.append(x)
result="".join(list)     #链接列表
print(result)

在这里插入图片描述
内置函数chr()ASCII码对应表的关系转换

发布了4 篇原创文章 · 获赞 5 · 访问量 386

猜你喜欢

转载自blog.csdn.net/weixin_44113249/article/details/105312259
今日推荐