2021-05-23

一.参数的定义

参数传递

形参和实参:

形参:定义 函数时的 参数变量

实参:调用 函数时,使用的参数变量

参数传递的过程,就是 把实参的引用 传递给 形参 ,使用实参的值来执行函数体的过程。

在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的

位置实参

按照参数位置,依次传递参数,这是最普通的方式。

def location(a, b) print(
a + b) locat
i
on, 9) “调用函数时,按顺序传递参数,3 传给 a,9 传给 b”
3.关键字传递参数
如果不想严格按照顺序传递参数,也可以按关键字传递。

def location(a, b) print(
a + b)
location(b = 3, a = 9)
“调用函数时,按关键字传递参数,3 传给 b,9 传给 a”

多值参数
当函数需要处理的参数个数不确定时,可使用 多值参数
python 中有两种多值参数:

接收 元组:参数名前加 一个 *

接收 字典:参数名前加 两个 *

一般在给多值参数命名时,习惯使用以下两个名字

*args — 存放 元组 参数

**kwargs — 存放 字典 参数,(kw 即 keyword,kwargs 即 键值对参数)

def demo(num, *args, **kwargs):
print(num) print(args)
print(kwargs)
demo(1, 2, 3, 4, 5, name=“小明”, age=18, gender=True)
输出: 1 (2, 3, 4, 5) {‘name’: ‘小明’, ‘age’: 18, ‘gender’: True}

拆包

在上面多值参数传递时,实际上使用了拆包功能。

拆包主要用于元组和字典参数的传递。

在调用带有多值参数的函数时,使用拆包简化参数的传递:

直接将一个 元组变量 实参传递给元组形参 args

在 元组变量前,加 *

直接将一个 字典变量 实参传递给字典形参 kwargs

在 字典变量前,加 **

def demo(*args, **kwargs):
print(args)
print(kwargs)
gl_nums = (1, 2, 3)
gl_xiaoming = {“name”: “小明”, “age”: 18}
“变量名前必须要加 * 号,否则不能无法正常拆包”
"错误演示(不加 * 号):
" demo(gl_nums, gl_xiaoming) 输出: ((1, 2, 3), {‘name’: ‘小明’, ‘age’: 18}) {}
“正确演示(加 * 号):” demo(*gl_nums, **gl_xiaoming) 输出: (1, 2, 3) {‘name’: ‘小明’, ‘age’: 18}
二.常见bug类型

1、SyntaxError

SyntaxError: invalidcharacterinidentifier

#语法错误有无效标识符,检查一下中文符号

SyntaxError: unexpectedEOFwhileparsing

#语法错误,多了无法解析的符号,检查一下是否多了或者少了括号

2、IndexError

IndexError: list indexoutofrange

#索引错误,超出索引范围,检查一下列表是否

3、TypeError

TypeError: must bestr,notint

#数据类型错误,该数据不是正确的数据类型,比如字符串和数字直接拼接,检查一下数据类

4、IndentationError

IndentationError:expected an indented block

#缩进错误,检查一下代码的缩进是否正确

5、KeyError

KeyError:‘fond’

#键错误,字典中没有该的key对应的值,检查一下键名或者字典数据是否正确

6、ValueError

ValueError: substringnotfound

#值错误,输入的数据类型跟要求的不符合

7、NameError

NameError:name’a’isnotdefined

#未初始化对象,变量没有被定义

8、AttributeError

AttributeError:‘tuple’object hasnoattribute’remove’

#属性错误,该对象没有这个属性、方法,检查一下数据类型

9、UnicodeDecodeError

UnicodeDecodeError/UnicodeEncodeError/UnicodeTranslateError

#Unicode 解码/编码/转换/时的错误

三.pycharm调试

step over:单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。

在不存在子函数的情况下和step into效果一样的(简而言之,越过子函数,但子函数会执行)。

step into:单步执行时,遇到子函数就进入并且继续单步执行(简而言之,进入子函数);

step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值