2021-01-20

Python函数入门与使用

在编写一个常用的功能时,这个功能就在一个程序中可能用到很多次,如果每次都写这样一段重复的代码,不但费时费力、容易出错,而且交给别人时也很麻烦。
所以 Python 提供了一个功能,即允许我们将常用的代码以固定的格式封装(包装)成一个独立的模块,只要知道这个模块的名字就可以重复使用它,这个模块就叫做函数(Function)。

Python中有一些内置的函数,比如input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用,除了可以直接使用的内置函数外,Python 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。

其实,函数的本质就是一段有特定功能、可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个“好听”的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。

Pytonh定义函数

  1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

  2. 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

  3. 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

  4. 函数内容以冒号起始,并且缩进。

  5. return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

def functionname( parameters ):    
"函数_文档字符串"    
	function_suite      
   return [expression]

Python形参和实参
在使用函数时,经常会用到形式参数(简称“形参”)和实际参数(简称“实参”),二者都叫参数,之间的区别是:

  • 形式参数:在定义函数时,函数名后面括号中的参数就是形式参数,例如:
 #定义函数时,这里的函数参数 obj 就是形式参数
def test(obj):
    print(obj)
  • 实际参数:在调用函数时,函数名后面括号中的参数称为实际参数,也就是函数的调用者给函数的参数。例如:
a = "12"
#调用已经定义好的 test函数,此时传
#入的函数参数 a 就是实际参数
test(a)

实参和形参的区别,就如同剧本选主角,剧本中的角色相当于形参,而演角色的演员就相当于实参
Python函数的分类
1、是否存在返回值
|-- 有返回值的函数
使用return关键字返回结果
函数遇到return关键字,则立刻返回
|-- 无返回值的函数
2、是否存在参数
|-- 有参函数
参数的个数,根据情况任意
参数的类型,是任意类型
|-- 无参函数
有这样4中函数类型:
1.无参数,无返回值
2.无参数,有返回值
3.有参数,无返回值
4.有参数,有返回值
第一种是不需要传入参数,也不需要返回值得,调用这类函数时直接就输出了结果。
第二种:无参数,有返回值:

def test():
    a,b = 0,2
    c = a+b
    return(c)

d = test()
print(d)

通过return()来返回值,然后直接调用test()并直接赋值给了d,d=2.
第三种:有参数,无返回值

def test(x,y):
    z= x+y
    print(z)

test(4,6

有参数的函数,在调用时需要传入参数,这里把4传给了x变量,把6传给了y变量,输出结果为10.

第四种:有参数,有返回值

def test(x,y):
    z= x+y
    return(z)

b = test(4,6)
print(b)

调入时传入参数,用return返回值,直接调用test()函数赋值给b,b=10.
3、函数定义者
|-- 系统函数
由官方定义的函数
print、input、type
|-- 第三方定义
需要安装这些模块,才能使用
pip install 模块名称
pip(python install package)
|-- 自定义函数
我们写的函数
注意:(函数、变量……)命名时一定要注意,和系统的全局函数不要冲突!!
全局变量和局部变量
全局变量:
直接定义在py(模块)文件中的变量。
局部(本地)变量:
定义在函数内部的变量叫做局部变量。

注意:全局变量在函数直接访问,可以正常访问,如果要在函数内部修改全局变量,python不让修改的。
如果要一定强制改呢?提前声明 这个函数需要修改某个全局变量
在函数的第一行,global关键字声明需要修改全局变量。
Python函数调用的本质:
调用函数也就是执行函数。如果把创建的函数理解为一个具有某种用途的工具,那么调用函数就相当于使用该工具。
函数调用的基本语法格式如下所示:
[返回值] = 函数名([形参值])
其中,函数名即指的是要调用的函数的名称;形参值指的是当初创建函数时要求传入的各个形参的值。如果该函数有返回值,我们可以通过一个变量来接收该值,当然也可以不接收。
需要注意的是,创建函数有多少个形参,那么调用时就需要传入多少个值,且顺序必须和创建函数时一致。即便该函数没有参数,函数名后的小括号也不能省略。
函数本质就是一个对象,参数的类型,是任意类型

	# 定义函数
def printme( str ):
   "打印任何传入的字符串"
   print str
   return
 
# 调用函数
printme("123")
printme("456")

执行结果为
123
456

#定义一个比较字符串大小的函数
def str_max(str1,str2):
    str = str1 if str1 > str2 else str2
    return str
  #调用函数
strmax=str_max("abcde","xyz");
print(strmax)

执行结果为:abcde
参数传递
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3]

a=“Runoob”
以上代码中,[1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
python 函数的参数传递:
Python 中,根据实际参数的类型不同,函数参数的传递方式可分为 2 种,分别为值传递引用(地址)传递
值传递:适用于实参类型为不可变类型(字符串、数字、元组);
引用(地址)传递:适用于实参类型为可变类型(列表,字典);

值传递和引用传递的区别是,函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数继续引用传递后,改变形参的值,实参的值也会一同改变。

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

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

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象传可变对象
函数参数:

  • 默认参数:

Python 定义带有默认值参数的函数,其语法格式如下:

```python
def 函数名(...,形参名,形参名=默认值)def dis_str(str1,str2 = "abc":
   print("str1:",str1)
   print("str2:",str2)

dis_str("xyz")
dis_str("jkl","efg")

运行结果为:
str1=xyz
str2=ab
str1=jkl
str2=efg
注意:当定义一个有默认值参数的函数时,有默认值的参数必须位于所有没默认值参数的后面,否则也出现语法错误。
上面程序中,dis_str() 函数有 2 个参数,其中第 2 个设有默认参数。这意味着,在调用 dis_str() 函数时,我们可以仅传入 1 个参数,此时该参数会传给 str1 参数,而 str2 会使用默认的参数.
当然在调用 dis_str() 函数时,也可以给所有的参数传值,这时即便 str2 有默认值,它也会优先使用传递给它的新值。

  • 可变参数
    在python,如果一个函数中参数可能有很多(这些参数,也可以没有),建议将这种参数设置为可变参数
    *参数名称(习惯性 *args)
    注意:可变参数默认是以元组封装所有参数。
  • 位置参数:
  • 我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应。
  • 而关键字参数是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。
def dis_str(str1,str2):
   print("str1:",str1)
   print("str2:",str2)
#位置参数
dis_str("xyz","abc")
#关键字参数
dis_str("jkl",str2="efg")
dis_str(str1="jkl",str2="efg")

运行结果:
str1=xyz
str2=abc
str1=jkl
str2=efg
str1=jkl
str2=efg
在调用有参函数时,既可以根据位置参数来调用,也可以使用关键字参数来调用。在使用关键字参数调用时,可以任意调换参数传参的位置。
当然,也可使用位置参数和关键字参数混合传参的方式。但需要注意,混合传参时关键字参数必须位于所有的位置参数之后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值