- 内置函数
- 函数定义
- 函数定义默认值指向可变对象的问题:
- python 函数在定义的时候,默认参数li的值就创建出来了,即[],因为默认参数li也是一个变量,
- 它指向对象[],每次调用该函数,如果改变了li的内容,则下次调用时,默认参数的内容就会改变,而不是
- 函数定义时的[]
- 默认值指向不可变的对象就不存在此问题,如 str、None
- 由于使用 **kwargs 参数时传入的参数不受限制,因此在处理该参数时需要 in 关键字进行判断
- 如果需要限制关键字参数的名字,可以使用命名关键字参数,格式: *, arg1, arg2
- 注意事项:
- 1.关键字参数属于必须参数
- 2.关键字参数传入时必须使用 key = value 这种方式
内置函数
官方文档:https://docs.python.org/3/library/functions.html
python 提供了许多内置函数,可以在程序中直接使用,当不清楚某个函数的用途时,可以在命令行中使用 help(name) 查看帮助信息
内置的数据格式转换函数:
- int():转换成整型
- str():转换成字符串
- float():转换成浮点数
- bool():转换成布尔值
进制转换:
- bin():二进制
- oct():转换成八进制
- hex():转换成十六进制
注意:在 python 中函数是一等公民 ,即可以将函数对象赋值给一个变量
函数定义
函数定义的细节:
- 声明一个函数:使用 def 关键字,后接函数名、括号、括号中的入参和冒号,然后在缩进块中编写函数体,函数的返回值使用 return 语句
- 参数检查:在调用函数时,如果参数个数不对、参数类型不对等时会抛出 TypeError 异常
函数返回值:
- 支持多个参数的返回值,返回值是一个元组 tuple,然后支持多个变量接受一个 tuple ,按位置赋值
- 如果没有显式声明 return,则会默认返回一个 return None
函数参数的细节:# 使用 pass 语句定义一个空函数
def func_name():
pass
支持函数定义时对入参设置默认值,但默认值必须指向不变对象
- 支持可变参数:支持传入0个或任意个参数,这些可变参数在函数调用时自动组装成一个tuple
- 在参数名前面加 *,参数就会变成可变参数
- 可变参数支持传入列表,不过需要使用 * 进行解包
- 关键字参数:允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个 dict
```python
#################### 参数默认值
函数定义默认值指向可变对象的问题:
python 函数在定义的时候,默认参数li的值就创建出来了,即[],因为默认参数li也是一个变量,
它指向对象[],每次调用该函数,如果改变了li的内容,则下次调用时,默认参数的内容就会改变,而不是
函数定义时的[]
def add(name=’Lily’, li=[]): li.append(name) return li
if name == ‘main‘: name_list = add() print(name_list) # [‘Lily’] name_list = add() print(name_list) # [‘Lily’, ‘Lily’]
默认值指向不可变的对象就不存在此问题,如 str、None
def add(name=’Lily’, li=None): if li is None: li = [] li.append(name) return li
if name == ‘main‘: name_list = add() print(name_list) # [‘Lily’] name_list = add() print(name_list) # [‘Lily’]
#################### 可变参数
def calc(*numbers): add = 0 for val in numbers: add += val return add
if name == ‘main‘:
# 可变参数支持传入多个参数
print(calc(1, 2, 3, 4, 5))
# 当传入tuple和list可变参数时,需要用*进行解包
print(calc(*(1, 2, 3, 4)))
print(calc(*[1, 2, 3, 4, 5]))
#################### 关键字参数
def hello(**kwargs): kwargs[‘age’] = 20 print(kwargs)
if name == ‘main‘: hello(name=’Bob’, age=18) # {‘name’: ‘Bob’, ‘age’: 20}
# 传入的user参数一份拷贝,因此在函数内部所作的改动不会影响外部的user
user = {'name': 'Bob', 'age': 18}
hello(**user) # {'name': 'Bob', 'age': 20}
print(user) # {'name': 'Bob', 'age': 18}
####################### 关键字函数
由于使用 **kwargs 参数时传入的参数不受限制,因此在处理该参数时需要 in 关键字进行判断
如果需要限制关键字参数的名字,可以使用命名关键字参数,格式: *, arg1, arg2
注意事项:
1.关键字参数属于必须参数
2.关键字参数传入时必须使用 key = value 这种方式
def func(name, *, age, city): print(“name = %s,age = %s,city = %s” % (name, age, city))
if name == ‘main‘: func(“Bob”, age=18, city=”Beijing”)
python的支持的参数:必选参数、默认参数、可变参数、关键字参数、命名关键字参数<br />这5种参数支持组合使用,但必须按照一定的顺序,即:**必选参数、默认参数、可变参数、命名关键字参数和关键字参数**
```python
def func(a,b,c=0,*args,**kwargs):
pass