python学习记录 — (4)函数

本文详细介绍了Python中的函数定义、参数传递方式、匿名函数以及变量的作用域等内容,并通过具体示例展示了不同参数类型在函数调用过程中的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Function.py

#coding=utf-8

#################################### python函数 ####################################

def f1(param):
    "这是函数f1"    # 函数定义第一行的字符串用于存放函数说明
    print "这是f1函数,传入的参数为:" , param
    return

def f2():
    "这是函数2"
    print "这是f2函数"
    return 1

f1(2)                                                       # 这是f1函数,传入的参数为: 2
print f2()                                                  # 这是f2函数 1

#################################### 参数传递 ####################################
"""
在python中,类型属于对象,变量是没有类型的;变量仅仅是对象的引用,可以引用List对象或者String对象等等;
在python中,string、tuples和numbers是不可更改对象,而list、dict等则是可以修改的对象;
"""
# 可更改对象(list、dict)

list_ = ["lua","python","c++","c","c#"]
print id(list_)                                             # 50755824
list_[1]="python2.x"
print id(list_)                                             # 50755824(内存地址不变)
print list_                                                 # ['lua', 'python2.x', 'c++', 'c', 'c#']

dict_= {'key1':"lua",'key2':'python'}
def f3(dictionary):
    "传入字典,并修改"
    dictionary['key2']="python2.x"
f3(dict_)
print dict_                                                 # {'key2': 'python2.x', 'key1': 'lua'}

# 不可更改对象(strings、tuples和numbers)

num = 5
print id(num)                                               # 14908720
num = 10
print id(num)                                               # 14908660 (地址改变了)

string = "python lua"
print id(string)                                            # 42414816
string = string+" c++"
print id(string)                                            # 42421528 (地址改变了)

def f4(number):
    print id(num)                                           # 14908660
    print id(number)                                        # 14908660 (与num地址一致)
    number = 555    # 此处相当于number从指向对象2 换成了指向 555对象,并未对对象2作改变,外界num依旧指向对象2
    print id(number)                                        # 15644216
f4(num)
print(num)                                                  # 10 (num还是指向对象2)
print id(num)                                               # 14908660 (地址不变)

# 必备参数(参数必需以正确的顺序传入函数,调用时数量与声明时的一样)

def whatsName(name,age):
    print "你的名字是:",name,", 你已经",age,"岁了"

whatsName("BeiJiaan","25")                                  # 你的名字是: BeiJiaan , 你已经 25 岁了

# 关键字参数(可以使用关键字参数来确定传入的参数值,此时可以允许参数传入的顺序与声明时不一致)

whatsName(age=25,name="BeiJiaan")                           # 你的名字是: BeiJiaan , 你已经 25 岁了

# 默认(缺省)参数(缺省参数的值如果没有传入,则被认为是默认值)

def whatsName(name,age = 25):
    print "你的名字是:",name,", 你已经",age,"岁了"

whatsName("Beijiaan")                                       # 你的名字是: Beijiaan , 你已经 25 岁了

# 不定长参数

def printArgument(arg,*args):
    "打印所有输入的参数"
    print arg
    for val in args:
        print val

printArgument("lua",1,2,3,"python","c++")                     # lua\1\2\3\python\c++

#################################### 匿名函数 ####################################

# lambda表达式
"""
lambda表达式的主体是一个表达式,而不是一个代码块;
其有自己的命名空间,不能访问自由参数列表之外或全局命名空间里的参数;
"""
getSum = lambda arg1,arg2: arg1+arg2

print(getSum(5,6))                                             # 11

#################################### 变量作用域 ####################################

# 函数内部定义的变量为局部变量(只能被本函数内访问),定义在函数外部的变量为全局变量(整个程序内可访问);

num = 1 # 此处定义的为全局变量
def changeInt1(number):
    print(num)                                                 # 1(可以访问外部的变量)
    number = 999
    print(num)                                                 # 1(无法修改)
def changeInt2():
    num = 999   # 此处相当于定义了一个局部变量num,则此后操作的num都是该局部变量
    print(num)                                                 # 999(此处的num是局部变量)

changeInt1(num)
changeInt2()
print(num)                                                     # 1(两种方法都无法修改)

# 如果想全局变量在函数内收到影响,需要使用global对全局变量进行声明一下;

num = 1
def changeInt3():
    global num
    num = 999

changeInt3()
print(num)                                                     # 999(该方法已成功改变全局变量的值)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值