0%

Python基础3:函数

1 初识函数

1.1 函数定义

# 定义函数
def my_func(a1, a2, a3):              #形参
    result = a1 + a2 + a3
    print(result)

# 使用函数
my_func(11, 1233)                    #位置传参
my_func(a2=12, a1=11, a3=33)        #关键字传参
my_func(11, a3=33, a2=22)            #混合传参,位置传参在前

1.2 默认参数

def func(a1, a2=22, a3=33):
    result = a1 + a2 + a3
    print(result)

默认参数位置放后面

2.3 动态参数

def func(*args):
    # 用户传来的参数统一打包为元组
    # args = (1,)
    # args = (11, True)
    print(args)

# 可以通过位置参数的形式传入n个参数
func(1)
func(11, True)
func("asdf", [11, 22], 999)
def func(**kwargs):
    # 自动将数据打包成字典
    # kwargs = {"a1": 1, "b1": 2, "c1": 3}
    print(kwargs)

func(a1=1, b1=2. c1=3)
# 定义函数时**要在*后面
def func(*args, **kwargs):
    # args=(11, 22, 33), kwargs={"xx": 123, "uu": 999}
    pass

func(11, 22, 33, xx=123, uu=999)

2 函数的返回值

def func(a1, a2):
    res = a1 + a2
    return res

data = func(100, 200)
# 函数遇到return,函数终止执行后续代码
# 函数没有返回值,默认返回None

3 函数的调用

4 函数参数传递的是内存地址

  • 不可变类型的参数传进函数以后,会被复制,不会被修改原值
  • 可变类型的参数传进函数后,可能被修改原值(数组、字典、集合)

5 作用域

5.1 作用域基础

  • 作用域是一块内存区域,只要在这个区域的就可以共享这个区域的数据
  • python中执行函数,就会为函数常见一个作用域
  • python只要一运行,就会有一个痊愈的作用域

5.2 关于变量

  • 全局变量
  • 局部变量,在函数重定义的

5.3 global关键字

NAME = '123'
def func():
    global NAME        #声明变量是全局变量
    NAME = "345"
    print(NAME)
print(NAME)            #123
func()                #456
print(NAME)            #123

6 函数名作为变量

def func():
    return 123

a = func
a() #执行函数

7 lambda表达式(匿名函数)

def func():
    return 123
# 等同于
func = lambda: 123

def func(a1, a2):
    return a1 + a2
# 等同于
func = lambda a1, a2: a1+a2


def func(data_string):
    return data_string.upper()
# 等同于
func = lambda data_string:data_string.upper()

8 内置函数

8.1 数值计算相关

# 绝对值
abs(-10)

# 2的5次方
pow(2,5)

# 求和
sum(num_list)

# 商和余数
v1, v2 = divmod(92, 10) # v1=9, v2=2

# 保留小数点后几位
round(3.14159, 2)

8.2 列表操作

# 最小值、最大值
min(num_list)
max(num_list)

# 只要有空值就返回True
v1 = all(list) 

# 只要有非空值就返回True
v2 = any(list) 

8.3 进制转换

# 转二进制
bin(100) #0b1100100

# 转八进制
oct(100) #0o144

# 转十六进制
hex(100) #0x64

8.4 文字和二进制转换

# 字符转ascii码
v1 = ord("A")

# ascii码转字符
v2 = chr(65)

8.5 类型转换

int("10")
str(10)
list({11, 22, 33})
set()
dict()
float()
bool()
bytes()

8.6 其他

# 求长度
len(list)
print()
input()
open()
range()
hash()

# 查看数据类型
if type(a) == list/str/set/dict/int...:

# 是否可执行(函数指针)
def func():
    print('123')
v1 = callable(func) #True

data_list = [11, 22, 33, func]
for item in data_list:
    if callable(item):
        item()

# 序列索引
for idx, item in enumerate(list, i):
    print("{} {}",format(item, idx))

# 对list/tuple排序,原数据不变
new_list = sorted(datalist)

9 推导式

9.1 列表推导式

# data_list = [0, 1, 2, ..99]
data_list = [i for i in range(100)]

# data_list = [100, 100, 100, .. 100]
data_list = [100 for i in range(100)]

# 带筛选
data_list = [i for i in range(100) if i%2==1]

9.2 字典推导式

data = {i: 123 for i in range(10)}

10 pip

> pip install ...
> pip uninstall ...
> pip freeze > requirements.txt
> pip install -r requirements.txt

# 换源(一次性)
> pip install flask -i https://pypi.douban.com/simple/
# 换源(默认永久)
> pip config set global.index-url https://pypi.douban.com/simple/

11 源码安装

# 下载源码
> wget url

# 解压

# 进入目录编译&安装
> python setup.py build
> python setup.py install