python入门(四)函数
2019-11-12 本文已影响0人
淡漠不淡漠
函数
- 关键字 def 后接函数名称和圆括号()
- 传人参数必须放到圆括号中()
- 函数第一行使用冒号:结尾
- 函数体使用缩进分割
#!/usr/bin/python3
def getPerson():
return 'hello word'
print(getPerson()
#输出结果:hello word
默认参数
- 必选参数必须在前面,默认参数在后。
- 默认参数一般为,参数值变化小的设置为默认参数。
#!/usr/bin/python3
def getPerson(name, sex, age = '18'):
return 'name=' + name + '\nsex=' + sex + '\nage=' + age
print(getPerson('lxy', 'f')
#输出结果:
name=lxy
sex=f
age=18
参数
- 在python,类型属于对象,变量是没有类型的
a = 'hello word'
a = [1,2,3]
- 上面的例子中 'hello word' 是String类型,[1,2,3]是List类型 变量a是一个指针它可以是String类型也可以是List类型
可更改对象
- List(列表)Sets(集合)Dictionaries (字典) 是可变类型
#!/usr/bin/python3
nums = [1, 2, 3]
nums[0] = 5
print(nums)
#输出结果:[5, 2, 3]
- 变量赋值nums = [1, 2, 3] 后再赋值nums[0]=5,则是将list nums的第1个元素值更改,本身nums没有动,只是其内部的一部分值被修改了。
不可变对象
- Numbers (数字) String (字符串) Tuple (元组) 为不可变对象
#!/usr/bin/python3
a = 'hello'
a = 'word'
print(a)
#输出结果:word
- 这里a赋值‘hello’再赋值'word', 其实是重新生成一个String类型,然后hello被丢弃,重新指向word,相当于新生成a
#!/usr/bin/python3
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print(b)
# 输出结果2
- 调用ChangeInt(b) 传值的时候 a 、b指向同一类型 2
- 但a = 10 的时候就重新生成了一个新的对象
命名参数
- 一般给函数传参数的时候,需要按照顺序传参,但是可以使用命名参数就不需要按照顺序传参数
- 如下例子,两种输出方式是一样的
#!/usr/bin/python3
def getPerson(name, age):
print('name=',name)
print('age=', age)
getPerson('lxy', 11)
getPerson(age=11, name='lxy'
#输出结果
name= lxy
age= 11
不定长传参
- 有的时候可能需要多个参数,但是又不想写多个参数来接收就可以使用不定长传参
- 使用 *
#!/usr/bin/python3
def nums(n, *num):
print(n,num)
nums(1,2,3,4,'aaa')
输出结果:1 (2, 3, 4, 'aaa')
- 想获取其中一个值 可以使用下标
#!/usr/bin/python3
def nums(n, *num):
print(n,num[0])
nums(1,2,3,4,'aaa')
#输出结果:1 2
匿名函数
- 关键字 lambda
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
#!/usr/bin/python3
sum = lambda n1,n2: n1+n2
print(sum(1,2))
#输出结果:3
全局变量和局部变量
- 定义在函数内部的都有一个局部作用域,定义在全局的是全局作用域
- 局部变量只能在函数内部使用
- 全局变量可以在全局使用
#!/usr/bin/python3
total = 10
def sum():
print('total=', total)
sum()
#输出结果:total= 10
- total 为全局变量可以在函数sum内部使用
#!/usr/bin/python3
def sum():
a = 10
print(a)
#输出结果:NameError: name 'a' is not defined
- a是在sun内部声明的,所以在函数外部调用会报错