python笔记.7

函数

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (),圆括号之间可以用于定义参数
  • 函数内容以冒号 : 起始,并且缩进,return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None
  • 语法
def 函数名(参数列表):
    函数体

参数传递

  • 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象
  • 实例:
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。
    
可变类型:变量赋值 la=[1,2,3,4]后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
  • python 传不可变对象实例:
通过 id() 函数来查看内存地址变化:
def change(a): print(id(a)) 
# 指向的是同一个对象
a=10 print(id(a))
# 一个新对象 
a=1 
print(id(a)) 
change(a)

结果为:

4379369136
4379369136
4379369424
  • 在调用函数前后,形参和实参指向的是同一个对象(对象 id 相同),在函数内部修改形参后,形参指向的是不同的 id

  • 传可变对象实例:

#!/usr/bin/python3 # 可写函数说明 def changeme( mylist ): "修改传入的列表" mylist.append([1,2,3,4]) print ("函数内取值: ", mylist) return # 调用changeme函数 mylist = [10,20,30] changeme( mylist ) print ("函数外取值: ", mylist)

传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

参数

调用函数时可使用的正式参数类型:

  • 必需参数
  • 关键字参数
  • 默认参数
  • 不定长参数

必需参数

  • 必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
  • 调用 printme() 函数,你必须传入一个参数
  • 实例:

#!/usr/bin/python3 #可写函数说明 def printme( str ): "打印任何传入的字符串" print (str) return # 调用 printme 函数,不加参数会报错 printme()

以上实例输出结果:

Traceback (most recent call last):
  File "test.py", line 10, in <module>
    printme()
TypeError: printme() missing 1 required positional argument: 'str'

关键字参数

  • 关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

  • 使用关键字参数允许函数调用时参数的顺序与声明时不一致
    以下实例在函数 printme() 调用时使用参数名:

#!/usr/bin/python3 #可写函数说明 def printme( str ): "打印任何传入的字符串" print (str) return #调用printme函数 printme( str = "菜鸟教程")

以上实例输出结果:

菜鸟教程

以下实例中演示了函数参数的使用不需要使用指定顺序:

## 实例(Python 3.0+)

#!/usr/bin/python3 #可写函数说明 def printinfo( name, age ): "打印任何传入的字符串" print ("名字: ", name) print ("年龄: ", age) return #调用printinfo函数 printinfo( age=50, name="runoob" )

以上实例输出结果:

名字:  runoob
年龄:  50

默认参数

  • 调用函数时,如果没有传递参数,则会使用默认参数。
  • 实例:
def printinfo( name, age = 35 ): "打印任何传入的字符串" print ("名字: ", name) print ("年龄: ", age) return #调用printinfo函数 printinfo( age=50, name="runoob" ) print ("------------------------") printinfo( name="runoob" )

不定长参数

  • 能处理比当初声明时更多的参数,声明时不会命名
  • 语法:
def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

注意:加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数,加了两个星号 ** 的参数会以字典的形式导入,如:

def functionname([formal_args,] **var_args_dict ):
   "函数_文档字符串"
   function_suite
   return [expression]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值