python基础语法总结(一)-- python类型转换函数+文件读写
目录
一. 函数定义
函数定义使用def关键字,使用接下来是方法名和入参,最后是冒号:
函数方法体在第一行下面,并且缩进若干空格(一般习惯4格)。所有保持同一缩进
'''函数定义'''
def function_1(arg1, arg2):
"""定义一个函数""" # 函数的注释,会出现在help()的打印结果中
print("arg1=" + arg1 + ", arg2=" + arg2)
return
二. 函数与入参
1. 函数传参的方式
- 位置传参
- 关键字传参
- 入参默认值
'''函数传参方式'''
### 1 位置传参
function_1("1", "2") # 打印 arg1=1, arg2=2,调用时将第一个入参"1"传入函数定义时的第一个参数arg1,第二个入参"2"传入arg2
### 2 关键字传参
function_1(arg1="1",arg2="2") # 直接指定arg1传入"1", arg2传入"2"
function_1("1",arg2="2") # 也可以只指定一个关键字入参,但必须放在最后
### 3 入参默认值
def function_2(arg1, arg2="2", arg3="3"): # 定义函数时,直接对arg3入参设置默认值"3".有默认值的参数一定要放在最后
print("arg1=" + arg1 + ", arg2=" + arg2 + ", arg3=" + arg3)
function_2("1","2","3") # 打印arg1=1, arg2=2, arg3=3
function_2("1","2") # 即使没有传入arg3,也不会报错,默认arg3赋值"3",打印:arg1=1, arg2=2, arg3=3
function_2(arg3="3", arg1="1", arg2="2") # 全部使用关键字传参时,顺序可以颠倒
function_2(arg1="1", arg2="2") # 不传arg3也不报错,使用默认值
注意:在调用函数时,如果有位置传参和关键字传参两种方式
1. 位置传参必须放在关键字传参之前
2. 位置传参的顺序必须和函数定义时的顺序一致
###
"""注意:在调用函数时,如果有位置传参和关键字传参两种方式
1. 位置传参必须放在关键字传参之前
2. 位置传参的顺序必须和函数定义时的顺序一致
"""
# function_1(arg1="1","2") 这种写法会报错:positional argument follows keyword argument,不能将关键字传参放在位置传参前
# function_1("2",arg1="1") 这种写法会报错:got multiple values for argument 'arg1'
# 位置传参已经给arg1传入"2"(位置传参这个位置,只能传给arg1),后面又用关键字传参给arg1传入"1",因此系统报错
function_2("1", arg3="3", arg2="2") # 当位置传参正确时,后面的关键字传参顺序可以打乱
function_2("1", arg3="3") # 当位置传参正确时,后面的关键字传参可以省略部分或全部
# 总之,要先列出没有默认值的形参,再列出有默认值的形参,要避免传参歧义
2. 入参如果传入列表,可能被函数改变其中内容
'''注意点:传入列表,入参可能被函数方法改变'''
l1 = list(range(1,10,2)) # l1 = [1, 3, 5, 7, 9]
def function_3(init_list):
for i in range(len(init_list)):
init_list[i] = init_list[i] + 1 # 每一项都加一
function_3(l1) # 调用function_3函数
print(l1) # l1会被改变,打印结果:[2, 4, 6, 8, 10]
要避免改变原入参,可以用以下实现:
### 避免改变原入参的实现
l1 = list(range(1,10,2)) # l1 = [1, 3, 5, 7, 9]
function_3(l1[:]) # 传入l1的副本
print(l1) # l1 没有被改变,仍为[1, 3, 5, 7, 9]
3. 传递任意数量的实参
# 传递任意数量的实参
def multi_args(a, *args): # 可传入多个参数,数量不定, 不定数量参数要放在最后;args是个空元组,并将传入的参数都放在args中
print(args)
multi_args(1,2,3,6,5,4) # 成功执行,打印:(2, 3, 6, 5, 4),a赋值为1
# 使用任意数量的关键字实参
def multi_key_args(a, b, **key_args): #key_args本质上是空字典,并将传入的多个关键字入参都放入此参数中
print(key_args)
multi_key_args(1, 2, first=3, second="ss") #输出: {'first': 3, 'second': 'ss'}
# multi_key_args(1, 2, 9, first=3, second="ss") 这样写会报错 multi_key_args() takes 2 positional arguments but 3 were given, 说明**只能传入关键字的参数
三. 匿名函数 lambda
'''匿名函数 lambda关键字'''
fun = lambda x: x * x # 使用lambda关键字,定义一个匿名函数,返回平方,并将这个匿名函数传给fun
fun(5) # 通过调用fun(x)来调用匿名函数,本例:25
### 匿名函数更多用在需要传递函数入参的地方
def function_out(a, fun): # 准备工作,定义一个函数function_out(),其中第二个入参是函数类型的入参
return fun(a) + 1
# 可以直接在调用某个函数时,在其入参的响应位置创建匿名函数并传参,起到精简代码的作用
result = function_out(3, lambda x: x + 5) # 计算第一个入参+5之后再+1的值,本例:result = 9
result = function_out(3, lambda x: x ** 2) # 计算第一个入参平方后再+1的值,本例:result = 10