一、函数的引用

# 0.常用的内置函数: max,min,sum, divmod
# 函数必须有输入和输出。
# max_num = max(1, 2, 3)
# print(max_num)

# 1.如何创建函数?定义函数,函数内容并不会执行
# 函数的输入专业叫参数, 函数的输出叫返回值。
# 重点:
#       - 形参: 形式参数,不是真实的值(定义函数时的参数)
#       - 实参:实际参数, 是真实的值(调用函数时的参数)
def get_max(num1, num2):
    result = num1 if num1 > num2 else num2
    return result
# 2. 如何调用函数?
max_num = get_max(30, 80)
print(max_num)

二、变量的作用域

首先要了解可变数据类型不可变数据类型

可变数据类型就是可以进行增删改的数据类型,反之为不可变数据类型。
可变数据类型:列表(list)、集合(set)、字典(dict)
不可变数据类型:元组(tuple)、字符串(str)、数值形

接下来,了解全局变量与局部变量

# 1. 全局变量: 全局生效的变量。函数外面的变量。
name = 'admin'
def login():
    print(name)
login()

# 2. 局部变量: 局部生效的变量。函数内部的变量。
def logout():
    age = 19
    print(age)
logout()
# 3. 函数内部修改全局变量.
# 1). money是局部变量还是全局变量? 全局变量
# 2). 如果要在函数中修改全局的变量,不能直接修改。 需要用global关键字声明修改的变量是全局变量。
# 3). 不可变数据类型修改全局变量一定要global声明, 可变数据类型不需要。
def hello():
    global money
    money += 1
    users.append('user1')
    print(money, users)
money = 100  # 不可变数据类型
users = []  # 可变数据类型
hello()

三、参数传递

  1. 形参和实参
  2. 参数检查:isinstance(var, int)判断变量var是否为int
def get_max(num1: int, num2: int) -> int:
    """
    求两数的最大值
    :param num1: 整型数1
    :param num2: 整型数2
    :return: 最大值
    """
    ## 上面相当于在给定义的函数做声明。
    if isinstance(num1, int) and isinstance(num2, int):
        return num1 if num1 > num2 else num2
    else:
        return 0
result = get_max(6.3, 2)   ## 这样就连返回值都是0
print(result)

四、常见的四类参数

1. 必选参数:必须要传递的参数

def get_max(num1: int, num2: int) -> int:
    return num1 if num1 > num2 else num2
    
result = get_max(20, 30)
print(result)

2. 默认参数:可传可不传的参数

def pow(x, y=2):
    return x ** y


result = pow(3)  # x=3, y=2, result=9
print(result)
result = pow(2, 4)  # x=2,y=4, result=2**4=8
print(result)

3. 可变参数: 参数的个数会变化,可以传0,1,2,3,…n

args是元组
args=arguments

def my_sum(*args):
    return sum(args)

result = my_sum(4, 5, 6)  # 15
print(result)

4. 关键字参数:可以传递key和value

kwargs存储在字典中

def enroll(name, age=18, **kwargs):
print(f"“”
入学信息
1. 姓名:{name}
2. 年龄:{age}
3. 其他:{kwargs}
“”")

enroll(‘张三’, country=‘china’, english=‘GRE’, sports=[‘篮球’, ‘羽毛球’])

五、匿名函数

1.匿名函数的定义及基本示例

**匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。(省略了用def声明函数的标准步骤)

Python用lambda语法定义匿名函数,只需用表达式而无需申明。(省略了用def声明函数的标准步骤)**

## 实际上 lambda :,冒号前面是你要输入的值,冒号后面是你要输出的值

pow = lambda x, y=2: x ** y
print(pow(2))

get_max = lambda num1,num2 :num1 if num1 > num2 else num2
print(get_max(1,2))

sumjiang = lambda *args : sum(args)
print(sumjiang(1,2,6))

2.匿名函数例题

给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
输入: 数组的记录;0 7 0 2
输出: 调整后数组的内容; 7 2 0 0
# nums = [0,7,0,2]
# num = sorted(nums,reverse=True)
# print(num)
## 偶数在前 奇数在后
nums = [0, 7, 0, 2]
num = sorted(nums, key=lambda nums: 0 if nums % 2 == 0 else 1)
print(num)
nums = [0, 7, 0, 2]
a= sorted(nums,key=lambda nums: 1 if nums == 0 else 0)
# nums.sort(key=lambda nums: 1 if nums == 0 else 0)

print(a)

3.sort()和sorted()的区别

1.sort() 是 list 的方法,只有 list 能用,而sorted() 是内置函数,可以对所有可迭代的对象进行排序操作;
sort()在对列表排序时需要单独使用,sort()方法是在原地对列表排序,是对原列表的直接操作,并不会返回一个新的列表。sort()方法需要单独使用,如果和赋值,打印等方法一起使用,结果会返回None
2.list 的 sort() 方法是原地操作,无返回值,而内置函数 sorted() 方法是返回一个新的 list。

sorted() 的用法
语法:
sorted(iterable, key=None, reverse=False)

参数:
iterable – 表示可以迭代的对象,例如可以是dict.items()、dict.keys()等。
key – 是一个函数,用来选取参与比较的元素。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

六、递归函数

## leecode上大部分二叉树的题目 大部分都要用到递归函数
res = 1
n= input()
for i in range(1,int(n)+1):
    res = res*i
print(res)

以下为递归函数的使用:
# def f(n):
#     if n ==1:
#         return 1
#     else:
#         return n*f(n-1)
# print(f(5))