函数与内置函数

目录

  • 函数的返回值

  • 函数的类型

  • 函数的参数

  • 利用函数对注册登录代码进行封装

  • 常见的内置函数

 

 

 

 

 

 

前提强调

#定义与调用
1.定义函数
使用关键字def

2.调用函数
使用函数名加括号
ps:如果函数需要参数则额外传递参数

#定义阶段(图1)
函数在定义阶段只检测函数体语法不执行函数体代码

#调用阶段(图2)
函数名加括号调用函数的时候才会执行函数体代码

 

 

 

 

 

 

函数的返回值

# 什么是返回值?
"""返回值即执行完某个方法该方法反馈出来的结果"""


# 如何获取返回值?
"""
通过变量名与赋值符号即可
变量名 = 方法/函数()
"""

1.当函数体没有return关键字的时候 默认返回None
def index():
print('from index')
res = index()
print(res) # None即空 表示没有
2.return关键字后面写什么函数就返回什么
 def index():
print('from index')
return 123
res = index()
print(res) # 123

3.return后面跟多个值默认会组织成元组的形式返回
def index():
print('from index')
return 123, 555, 66, 5, 4, 5, 4
print('from index')
res = index()
print(res) # (123, 555, 66, 5, 4, 5, 4)
4.函数体代码遇到return立刻结束整个函数的运行

 

 

 

 

 

 

函数的类型

1.无参函数:
函数在定义阶段没有参数调用阶段也不需要参数

 

 

 

 

 

2.有参函数:
 函数在定义阶段括号内填写了变量名即需要参数

 

 

 

 

 

3.空函数
没有具体的函数体代码
一般用于前期的架构搭建

 

 

 

 

 

函数的参数

函数在定义阶段括号内书写的变量名称之为函数的形式参数
简称为形参(变量名)

函数在调用阶段括号内书写的值称之为函数的实际参数
简称为实参(变量值)

#两者在调用函数的时候临时绑定 函数运行结束分开
eg:
    def index(name):  形参
        print(name)
    index('jason')  实参  name = 'jason'

 

 

1.位置参数:
按照位置一一对应传值 多一个不行少一个也不行

 

 

2.关键字参数:

指名道姓的给形参传值  可以打破位置限制

 

 

 

 

 

3.默认参数:

函数在定义阶段就给形参赋值了

 

 

4.可变长参数:

'''

函数如何做到无论接收多少个位置参数都可以正常运行 *在形参中使用 会接收多余的位置参数组织成元组的形式赋值给*后面的变量名
'''


#约定
针对形参中的可变长参数 变量名推荐使用
*args **kwargs

 

 

 

 

"""
函数如何做到无论接收多少个关键字参数都可以正常运行
**在形参中使用
会接收多余的关键字参数组织成字典的形式赋值给**后面的变量名

"""

 

 

 

 

补充:
定义一个函数
该函数无论接收多少个位置参数还是关键字参数都可以正常运行

 

 

 

 

 

*与**在实参中的作用

*在实参中使用
会将列表/元组内的元素打散成一个个位置参数传递给函数

 

 

 

 

 

**在实参中使用
会将字典内的元素分解成一个个关键字参数传递给函数

 

 

 

 

 

利用函数对注册登录代码进行封装

def register():
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    # 校验用户名是否存在
    with open(r'userinfo.txt', 'r', encoding='utf8') as f:
        for line in f:
            real_name = line.split('|')[0]
            if real_name == username:
                print('用户名已存在')
                return
    # 将用户名和密码写入文件
    with open(r'userinfo.txt', 'a', encoding='utf8') as f:
        f.write('%s|%s\n' % (username, password))
        print('%s注册成功' % username)


def login():
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    with open(r'userinfo.txt', 'r', encoding='utf8') as f:
        for line in f:
            real_name, real_pwd = line.split('|')
            if real_name == username and password == real_pwd.strip('\n'):
                print('登录成功')
                return
    print('用户名或密码错误')


func_dict = {'1': register,
             '2': login
             }
while True:
    print("""
    1 注册
    2 登录
    """)
    choice = input('请输入执行功能编号>>>:').strip()
    if choice in func_dict:
        func_name = func_dict.get(choice)
        func_name()
    else:
        print('请输入正确的编号')
View Code

 

封装代码的精髓

1.先写def和函数名
2.将代码缩进
3.查看内部需要哪些数据
4.在形参中定义出来即可

 

def auth_username(username):
    # 校验用户名是否存在
    with open(r'userinfo.txt', 'r', encoding='utf8') as f:
        for line in f:
            real_name = line.split('|')[0]
            if real_name == username:
                print('用户名已存在')
                return True
    return False


def get_info():
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    return username, password


def write_data(username, password):
    # 将用户名和密码写入文件
    with open(r'userinfo.txt', 'a', encoding='utf8') as f:
        f.write('%s|%s\n' % (username, password))
        print('%s注册成功' % username)


def register():
    username, password = get_info()
    # 调用校验用户名是否存在的函数
    is_exist = auth_username(username)
    if is_exist:
        return
    write_data(username, password)


def login():
    username, password = get_info()
    with open(r'userinfo.txt', 'r', encoding='utf8') as f:
        for line in f:
            real_name, real_pwd = line.split('|')
            if real_name == username and password == real_pwd.strip('\n'):
                print('登录成功')
                return
    print('用户名或密码错误')


func_dict = {'1': register,
             '2': login
             }
while True:
    print("""
    1 注册
    2 登录
    """)
    choice = input('请输入执行功能编号>>>:').strip()
    if choice in func_dict:
        func_name = func_dict.get(choice)
        func_name()
    else:
        print('请输入正确的编号')
View Code

 

 

内置函数

 

# 判断变量是否可以调用
print(callable(name))  # False
print(callable(index))  # True


# 返回ASCII码中数字对应的字符
print(chr(65))  # A     65-90
print(chr(122))  # z    97-122


# format字符串格式化输出
print('my name is {} and my age is {}'.format('jason',18))
print('my name is {0} {1} {1} and my age is {1} {0}'.format('jason',18))
print('my name is {name} {name} {age} and my age is {age}'.format(name='jason',age=18))


.......
View Code

 

 

posted @ 2021-08-18 15:02  陌若安然  阅读(97)  评论(0)    收藏  举报