python之函数、内部函数、文件操作


一、函数

所谓函数,就是把重复的代码单独的分离出来,放在一个公共的地方,以后可以一直的进行调用,这样就可以解决多次重复来编写。

1.定义函数使用的关键字是def
2.定义规则:
def 函数名称(形式参数):
函数的表达式

3.调试模式:debug的模式 那么程序执行也是在debug模式下执行

4.参数:

形式参数:在一个函数中,我们把定义的函数里面的参数叫形式参数

实际参数:函数实际调用的时候,赋予的参数叫实际参数

 

默认参数:在定义函数的时候,给函数的形式参数指定他的默认值,他的优先级是低于实际参数

  

动态参数:

1.当定义的函数形式参数的个数不确定的时候

2.当定义的函数形式参数的数据类型不确定的时候

            在动态参数里面,一个*代表的是元组,两个*代表的是字典

     动态参数能够解决什么?

                 当一个请求参数有时候是2个,有时候是3个,有时候是n个,如果按照正常的思维,我们需要编写n个函数,那么有了动态参数,我们只需要写一个参数就好了

也就是说,当我们调用被定义动态参数的时候,实际参数如果存在,基本是key=value的情况,

基本是字典的数据类型,非key=value,所有的类型都是元组

def func(*args,**kwargs):
    print('args的类型',type(args))
    print('args的内容', args)
    print('kwargs的类型', type(kwargs))
    print('kwargs的内容', kwargs)

func('a',name='caiying') #如果实际参数是key:value类型,会自动赋值给kwargs
func([1,2,3])            #如果实际参数是除了key:value的其他类型,都自动赋值给args
func(age=18)
data={"name":"caiying","age":"28"}
func(**data) #如果实际参数字典类型,调用的时候加2个*
data2=(1,2,3)
func(*data2) #如果元组类型,调用的时候加1个*
data3=(4,5,6)
func(data3) 

5.返回值:
  • 1、当一个函数里面,有return,那么函数的返回值就是return后面的值
  • 2、当一个函数里面,没有return,那么函数的返回值是none
  • 3、一个函数可以有多个返回值

    如果在单个的函数角度而言,函数其实有没有返回值无所谓的但是函数与函数之间需要建立一层关联,那么就可以通过函数的返回值把这层关联关系建立起来。

 函数的形式函数他的实际参数的值也可以是函数


def login(username="caiying",password="admin"):
    '''登录'''
    if username=='caiying' and password=='admin':
        return  True
    else:
        return False

def profile(ASD): #定义函数
    '''个人主页''' #注释函数是做什么的
    if ASD:
        print('欢迎您访问我的个人主页')
    else:
        print('登录失败,请再次登录')
profile(login())

5.程序执行的入口:
main:主函数,在其他的编程语言里面,执行的代码必须在主函数里面可以执行,其他不可以执行
但是python都可以,设计主函数的目的:指定程序执行的入口
6.全局变量 局部变量
全局变量:指的是定义这个变量他的作用域是这个python文件
局部变量:在函数内部定义的变量,叫局部变量,那么他的作用域仅仅是针对变量而已

备注:当全局变量与局部变量名称一致的时候:
1、在函数内部,局部变量的优先级高于全局变量的
2、在python文件而言,全局变量的优先级是高于局部变量的


name="asd"
def func():
    #在函数内部引用全局变量
    #如果想再函数内部调用全局变量,我们就用关键字global申明全局变量
    global name
    name="admin" #全局变量
    print(name)

func()

二、内部函数

1.lambda:匿名函数
c=lambda x,y:x+y
print(c(2,3))
2.filter:过滤
#常规方式
lists=[x for x in range(10)]
list2=list()
for item in lists:
    if item>3:
        list2.append(item)
print(list2)
#函数
def func(a):
    if a>3:
        return True
print(list(filter(func,lists)))
print(list(filter(lambda a:a>3,lists)))
print(list(filte

3.map对所有对象进行同样的操作


lists=[x for x in range(10)]
def func(a):
    return a+10
print(list(map(func,lists)))
print(list(map(lambda a:a+10,lists)))

4.eval():字符串转为表达式
str1='5+10'
print(eval(str1))
5.range():包含开始不包含结尾
for item in range(5):
    print(item)
6.ord():字母转为数字
print(ord('1'))
7.chr():数字转为字母
print(chr(90))
8.导入random的库


#导入random的库 相当于随机生成的验证码
import random #导入random的库
list1=[] #创建个空列表
for i in range(6): #展示6位
    r=random.randrange(97,120) #从97到120 随机抽取数字
    list1.append(chr(r)) #将r里的数字转为字母
print(''.join(list1)) #将列表转为字符串

三、函数实战

def out():
    username = input('请输入账户:\n')
    password = input('请输入密码:\n')
    return username,password

def register():
    '''注册账户'''
    username, password
    asd=username+' '+password
    f=open('user.txt','w') #新建一个user.txt的文件 执行写的权限
    f.write(asd)  #在文件里写入上面赋值的变量asd
    f.close()     #关闭文件
def login():
    '''登录'''
    username, password
    f=open('user.txt','r') #打开user.txt的文件 执行读的权限
    lists=f.read().split(' ') #将读到的user.txt的文件的内容,转为列表
    #如果username=lists中第0个索引的值,password=lists中第1个索引的值
    if username==lists[0] and password==lists[1]:
        print('login success') #输出登录成功
    else:
        print('login failed') #否则,输出登录失败
while True:
    f=int(input('1、注册 2、登录 3、其他\n')) #将输入的值强制转化为int类型
    if f==1:
        register()
    elif f==2:
        login()
    elif f==3:
        break

 四、文件操作

1.文件操作使用的函数是open
2.文件操作模式:
w:写
1、open写文件的时候,首先判断被操作的文件是否存在
2、如果不存在,就内部自动创建一个文件
r:读
1、open读取文件的时候,首先判断被操作的文件是否存在
3.文件操作步骤:
打开
操作
关闭
#写的过程
f=open('log.txt','w',encoding='utf-8')
f.write('hello')
f.close()
'''写的过程'''
f=open('log.txt','r',encoding='utf-8')
#读取文件所有的内容
print(f.read())
f.close()