python函数

函数的阶段

定义阶段

定义函数需要使用关键字def,函数在定义阶段只检测函数体语法不执行函数体代码。

调用阶段

调用函数需要使用:函数名加括号。如果函数需要参数那么则需要额外传递参数,而且在调用函数时才会执行函数体代码。

 

函数的返回值

返回值

就是执行完某个方法该方法反馈出来的结果

如何获取返回值

通过变量名和赋值符号即可,变量名 = 函数()

 

返回值的情况

情况一

def index():
    print('from index')
# 当函数体没有return关键字的时候 默认返回None
res = index()
print(res)  # None即空 表示没有

情况二

 

情况三

def index():
    print('from index')
    return 123
# return关键字后面写什么函数就返回什么
res = index()
print(res)  # 123

情况四

 

函数的类型

无参函数

函数在定义阶段没有参数调用也不需要参数。

def index():
    print('from index')
index()

 

有参函数

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

def index(x):
    print('from index', x)
index(1)

 

空函数

没有具体的函数体代码。

"""一般用于前期的架构搭建"""
def run():
    pass  # pass用于补全语法结构,本身没有任何含义
def fight():
    pass
def talk():
    pass

 

函数的参数

形参

函数在定义阶段括号内书写的变量名称之为函数的形式参数,简称为形参,相当于变量名。

实参

函数在调用阶段括号内书写的值称之为函数的实际参数,简称为实参,相当于变量值。

使用

两者在调用函数的时候临时绑定,函数运行结束分开。

def index(name):  # 形参
    print(name)
index('jason')  # 实参  name = 'jason'

 

位置参数

按照位置一一对应传值,数据个数既不能多也不能少。

def index(x, y):
    print(x, y)
index()  # 不传不可以
index(1)  # 传少了也不行
index(1, 2)  # 个数正确可以
index(1, 2, 3, 4, 5, 6, 7)  # 传多了也不行

 

关键字参数

指定给某个形参传值,可以打破位置限制。

def index(x, y):
    print(x, y)
index(y=111, x=222)
index(111, y=222)
# index(111, x=222)  # 报错
# print(y=111,222)  # 报错 位置参数一定要在关键字参数的前面

 

默认参数

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

def index(x, y):
    print(x, y)
def register(name, age, gender='male'):
    print(name, age, gender)
'''默认参数不给值的情况下就使用默认的 给了就使用给了的'''
register('jyb', 12)
register('yrsbyq', 22)
register('wplsq', 33)
register('sadgirl', 18, 'female')

 

可变长参数

无论接收多少个位置参数都可以正常运行,无论接收多少个关键字参数都可以正常运行。

完成这个需求可以使用* 和** 完成。

def func(*a, **b):
    print(a, b)
func(1, 2, 3, a=1, b=2, c=3)
func(1, 2, 3, 4, 5, 6, 7)
func(a=1, b=2, c=3)

 

* 和 ** 的使用

形参中的使用

*在形参中使用

会接收多余的位置参数组织成元组的形式赋值给*后面的变量名。

**在形参中使用

会接收多余的关键字参数组织成字典的形式赋值给**后面的变量名。

 

实参中的使用

*在实参中使用

会将列表/元组内的元素打散成一个个位置参数传递给函数。

**在实参中使用

会将字典内的元素打散成一个个关键字参数传递给函数。

 

在定义阶段,使用 * 和 ** 时,默认的变量名是args和kwargs,这两个单词是约定俗成的使用,不用也行。

 

函数封装

面条版代码封装步骤

1.先写def和函数名

2.将代码缩进

3.查看内部需要的数据

4.在形参中定义出来

尽量做到一个函数就是一个具体的功能

def auth_username(username):
    # 校验用户名是否存在
    with open(r'info.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'info.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'info.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:
     # .get 从字典中根据key获取对应的value值 func_name = func_dict.get(choice) func_name() else: print('请输入正确的编号')

 

内置函数

 

虽然表格上的函数很多,但是其实不需要全部掌握的,只需要掌握一小部分即可,其他的想用的时候再百度就行。

print(abs(-100)) # 绝对值 100
print(all([1, 2, 3, 4, 0]))  # and
print(any([1, 2, 3, 4, 0]))  # or

print(bin(100))  # 进制转换 二进制
print(oct(100))  # 八进制
print(hex(100))  # 十六进制

 

name = 'jyb'
def index():
    pass
# 能否加括号调用
print(callable(name))  # False
print(callable(index))  # True

print(chr(65))  # 返回ASCII对应字符  A

 

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
print(max(l))  # 取最大值 11
print(min(l))  # 取最小值 1
print(sum(l))  # 求和    56

 

posted @ 2021-08-18 16:13  wddwyw  阅读(37)  评论(0编辑  收藏  举报