python函数参数

强调

1.定义与调用
定义函数使用关键字def
调用函数需要使用
函数名加括号(如果函数需要参数那么则额外传递参数)

2.定义阶段
函数在定义阶段只检测函数体语法不执行函数体代码

(只要函数体代码本身没错就不会报错,但可能会有下划线)

3.调用阶段
函数名加括号调用函数的时候才会执行函数体代码

函数的返回值

index()
什么是返回值?
返回值即执行完某个方法该方法反馈出来的结果
(根据需要可以使用return自己选择反馈出来的内容) 如何获取返回值? 通过变量名与赋值符号即可 变量名
= 方法/函数()
比如:
res = index()
print(res)
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 res = index() print(res) # (123, 555, 66, 5, 4, 5, 4) 4.函数体代码遇到return立刻结束整个函数的运行 def index(): print('from index') return 123, 555, 66, 5, 4, 5, 4 print('from index') index()

函数的类型

# 1.无参函数:函数在定义阶段没有参数调用阶段也不需要参数
def index():
    print('from index')
index()

# 2.有参函数:函数在定义阶段括号内填写了变量名即需要参数
def index(x):
    print('from index', x)
index(1)

# 3.空函数(没有具体的函数体代码)
"""一般用于前期的架构搭建"""
def run():
    pass  # 补全语法结构 本身没有任何含义
def fight():
    pass
def talk():
    pass

函数的参数

"""
函数在定义阶段括号内书写的变量名称之为函数的形式参数
    简称为形参
        函数的形参相当于变量名
函数在调用阶段括号内书写的值称之为函数的实际参数
    简称为实参
        函数的实参相当于变量值
两者在调用函数的时候临时绑定 函数运行结束分开
def index(name):    形参  name = 'jason'中的name
    print(name)
index('jason'):     实参  name = 'jason'中的jason
  print('jason')
"""


# 1.位置参数:按照位置一一对应传值 多一个不行少一个也不行
def index(x, y):
    print(x, y)

index(1,2)  '''使用时,填写的参数数量必须保持和函数中一致,多了少了没有都会报错'''

# 2.关键字参数:指名道姓的给形参传值  可以打破位置限制
def index(x, y):
    print(x, y)
index(y=111, x=222)
index(111, y=222)
index(111, x=222)  #报错
print(y=111,222)  #报错
'''使用关键字参数也必须保证原函数中每个参数都有对应值,默认从左往右
而且使用关键字参数时,关键字参数必须在位置参数的后面'''
# 3.默认参数:函数在定义阶段就给形参赋值了
def register(name, age, gender='male'):
    print(name, age, gender)
register('jason', 18)
register('tony', 28)
register('kevin', 38)
register('huahua', 18, 'female')
'''通过在原函数中加默认值,可以让之后使用时,不填写有默认值的参数位子,自动使用默认的内容
如果填写了有默认值的参数格子,则填写的内容直接覆盖默认值'''
# 4.可变长参数(使用频率最高)
'''函数如何做到无论接收多少个位置参数都可以正常运行
*在形参中使用 
    会接收多余的位置参数组织成元组的形式赋值给*后面的变量名
'''
def func(a, *b):
    print(a, b)
func(1,2,3,4,5,6,7,8,9,10)  #1 (2, 3, 4, 5, 6, 7, 8, 9, 10)
func(1) #1 ()
"""函数如何做到无论接收多少个关键字参数都可以正常运行
**在形参中使用
    会接收多余的关键字参数组织成字典的形式赋值给**后面的变量名
"""
def func(a,**b):
    print(a,b)
func(a=1,b=2,c=3,d=4,e=5)   #1 {'b': 2, 'c': 3, 'd': 4, 'e': 5}
func(a=1)   #func(a=1)

# 小练习  定义一个函数 该函数无论接收多少个位置参数还是关键字参数都可以正常运行
def func(*a, **b):
    print(a, b)
func(1, 2, 3, a=1, b=2, c=3)    #(1, 2, 3) {'a': 1, 'b': 2, 'c': 3}

"""
约定俗成
    针对形参中的可变长参数 变量名推荐使用
        *args  **kwargs
def login(*args, **kwargs):
    pass
"""

*与**在实参中的作用

l = [11, 22, 33, 44, 55]
d = {'username': 'jason', 'pwd': 123, 'hobby': 'read'}
def func(*args, **kwargs):
    print(args, kwargs)
"""
*在实参中使用
    会将列表/元组内的元素打散成一个个位置参数传递给函数
"""
func(*l)  # func(11,22,33,44,55)
"""
**在实参中使用
    会将字典内的元素打散成一个个关键字参数传递给函数
"""
func(**d)  # func(username='jason',pwd=123,hobby='read')

内置函数

绝对值:print(abs(-111))
相当于and:print(all([1, 2, 3, 4, 0]))
相当于and:print(any([1, 2, 3, 4, 0]))
二进制:print(bin(100))
八进制:print(oct(100))
十六进制:print(hex(100))
name = 'jason'
def index():
    pass
判断变量是否可以调用
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))
增加加依次递增的数字前标
l = ['jason', 'kevin', 'tony', 'jerry', 'tom']
count = 1
for name in l:
    print(count,name)
    count += 1

for i, name in enumerate(l, 10):  #10表示第一个的数值,默认是0
    print(i, name)


l = [11, 22, 33, 44, 55, 66, 77, 88, 99]
最大值:print(max(l))
最小值:print(min(l))
求和:print(sum(l))

 函数封装版登陆界面

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  # 函数中return相当于while循环中的break,所以直接跳到下一层
    # 将用户名和密码写入文件
    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 = 在字典中搜索了用户输入的内容
        func_name()
    else:
        print('请输入正确的编号')

超级函数封装版登陆界面

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
# 此函数:根据输入的用户名判断用户名是否存在,存在则输出true,不存在则输出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)
'''
此函数:提取出get_info输出的用户名和密码,获取'将它们输入auth_username'得到的结果
如果得到true(重复的用户名),则此函数无效,如果得到false(不重复的用户名)则运行'将用户名密码输入write_data'
'''

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('用户名或密码错误')
# 此函数:提取出get_info输出的用户名和密码,和后台的用户名密码相比对,都相同则显示登陆成功,不然就显示用户名或密码错误

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('请输入正确的编号')
# 建立循环,显示1 注册 2 登陆,获取用户输入的内容,如果该内容在字典func_dict中,执行字典中对应的内容,不然就显示请输入正确的编号

 

posted @ 2021-08-18 19:37  雾雨黑白  阅读(76)  评论(0编辑  收藏  举报