Python学习6

函数

函数就是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
def 函数名(参数1,参数2....参数n):
    函数体
    return 语句
# 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
# 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
# 函数的第一行语句可以选择性地使用文档字符串(用于存放函数说明)
# 函数内容以冒号起始,并且缩进
# return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None。

默认参数

(放置在形参末尾)

def user_info(name, age, profession="IT"):
    print("姓名:{} --- 年龄: {} ---- 职业:{} ".format(name, age, profession))

user_info("Amy", 25)

输出

姓名:Amy --- 年龄: 25 ---- 职业:IT 

关键字参数

使用参数名给函数传递参数,不关系参数列表的定义的顺序
def User_infor(name, age, profession="IT"):
    print("姓名:{} ---- 年龄:{} ---- 职业 ---- {}".format(name, age, profession))

User_infor(age=25, name="Tom")

不定长参数

通过*接收参数,默认参数不可省略,返回一个元组

def User_information(name, age, profession="IT", *hobby):
    print("姓名:{} ---- 年龄:{} ---- 职业 ---- {} ---- 爱好 ---- {}".format(name, age, profession, hobby))

User_information("Jerry",26, "IT", "跑步", "独处")

输出

姓名:Jerry ---- 年龄:26 ---- 职业 ---- IT ---- 爱好 ---- ('跑步', '独处')

通过** 接受位置参数,没有被定义的的关键参数放置在字典中,其中,默认参数可以省略,返回一个元组

def User_information2(name, age, profession="IT", **hobby):
    print("姓名:{} ---- 年龄:{} ---- 职业 ---- {} ---- 爱好 ---- {}".format(name, age, profession, hobby))

User_information2(age=26, name="Jerry",  hobby=("跑步", "独处"))

输出

姓名:Jerry ---- 年龄:26 ---- 职业 ---- IT ---- 爱好 ---- {'hobby': ('跑步', '独处')}

只接受关键字参数

参数列表中内部加入*,*后所有参数使用关键字

def User_information3(name, *, age, profession="IT", **hobby):
    print("姓名:{} ---- 年龄:{} ---- 职业 ---- {} ---- 爱好 ---- {} ".format(name, age, profession, hobby))

User_information3("Jerry", age=26, profession="IT", hobby="听歌" )

输出

姓名:Jerry ---- 年龄:26 ---- 职业 ---- IT ---- 爱好 ---- {'hobby': '听歌'} 

参数传值

函数参数的传递中,传递的是类型对象

在 Python 中,字符串,整形,浮点型,tuple 是不可更改的对象,而 list , dict 等是可以更改的对象

不可更改的类型:变量赋值 a = 1,其实就是生成一个整形对象 1 ,然后变量 a 指向 1,当 a = 1000 其实就是再生成一个整形对象 1000,然后改变 a 的指向,不再指向整形对象 1 ,而是指向 1000,最后 1 会被丢弃

可更改的类型:变量赋值 a = [1,2,3,4,5,6] ,就是生成一个对象 list ,list 里面有 6 个元素,而变量 a 指向 list ,a[2] = 5则是将 list a 的第三个元素值更改,这里跟上面是不同的,并不是将 a 重新指向,而是直接修改 list 中的元素值。

不可更改的类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是 a 的值,没有影响 a 对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

可更改的类型:类似 c++ 的引用传递,如 列表,字典。如 fun(a),则是将 a 真正的传过去,修改后 fun 外部的 a 也会受影响 

一句话,传递的是可改变的参数类型,参数发生改变, 否则仅仅是传递参数的值,参数不发生改变

Python样例

# 不可变
def func(b):
    b = 1000
    print("函数内部b:", b)
    
b = 1
func(b)
print(b)

输出

函数内部b: 1000
1
# 可变
def func1(b):
    b.append(2)

b = [1]
func1(b)
print(b)

结果

[1, 2]

匿名函数

# lambda 只是一个表达式,函数体比 def 简单很多。
# lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
# lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数

表达式:

lambda [arg1 [,arg2,.....argn]]:expression
# 两数求和
sum = lambda x, y: x + y
print(sum(1,2))
x2 = 1001
sum1 = lambda y: x2 + y

x2 = 100001
sum2 = lambda y: x2 + y

print(sum1(1))  # x2自由变量,运行时绑定
print(sum2(1))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值