1.什么是函数:

可重复使用的,用来实现单一,或相关联功能的代码段。

函数分为内置函数和自定义函数,这里先讲自定义函数

2.如何定义函数:

#语法
def 函数名(参数1,参数2,参数3,...):
'''注释'''
函数体
return 返回的值

注:函数必须先定义才能使用,定义阶段不执行代码只检测语法.意思就是语法错误在定义阶段就会检测出来,代码的逻辑错误只有在执行时才会提示.

3.定义函数的三种形式

无参:用于执行一些打印等操作,不需要参数传进去

有参:需要根据传进去的参数进行运算

空函数:用于设计代码结构

#     1.无参函数
# def foo():
# print('from foo')
# foo()
# # 2.有参函数
# def bar():
# print(x,y)
# bar(1,2)
# # 3,空函数
# def func():
# pass

4.函数调用

函数调用就是函数名加个()即可

4.1调用函数的三种形式:

# 1.语句形式
# def foo():
# print('from foo')
# foo()
#
# 2.表达式形式
# def foo(x,y):
# res = x+y
# return res
# res = foo(1,2) # 3.可以当做参数传给另外一个函数
# def max2(x,y):
# if x>y:
# return x
# else:
# return y
# res = max2(max2(1,2),3)
# print(res)

4.2函数的返回值

1.返回值没有类型限制

2.返回值没有个数限制

注:返回多个值的结果就是返回一个元组,0个值返回为None

return是函数结束的标准,可以有多个return但只执行一次

# def f1():
# print('111')
# return 1
# print('222')
# return 2
# print('333')
# return 3
#def f1()
#只执行 print('111')

4.3函数的参数

函数的参数分为形参和实参.形参即为变量名,实参为变量值,在函数调用时,把值绑定到变量名上,在函数调用结束后,解除绑定

形参与实参的具体分类(重点)

1.位置参数

1.1位置形参

  在定义函数阶段按照从左到右的顺序定义的形参.   注:按位置定义的形参必须被传值,多一个不行,少一个也不行

# def foo(x,y)
# print(x,y)
#
# foo(1,2) #正确
# foo(1,2,3) #错误

1.2位置实参

  在调用函数阶段按照从左到右的顺序依次传入的值.

2.关键字参数

  关键字实参:在调用函数阶段,按照key=value的形式指名道姓的为指定值传值

  注:可以完全打乱顺序,仍可以为指定的形参传值

    可以混合使用位置实参和关键字实参,但必须注意(1)位置实参必须放在关键字实参前面(2)不能对一个形参重复赋值

def foo(name,age):
print(name,age) foo('zfj',18)
foo(age=18,name='egon')
# foo(name='zfj',18)#报错
# foo('zfj', age=18)

3.默认参数

  指的是在定义阶段就已经为某个形参赋值了,该形参称之为有默认值的形参

注意:1.在定义阶段就已经被赋值,意味着在调用阶段就可以直接使用,默认参数

   2.位置形参应该放到默认形参前面

   3.默认参数的值,通常应该为不可变类型

def foo(x,y=2):
print(x,y)
foo(1)#1,2
foo(1,3)#1,3

4.可变长度参数

  站在实参的角度,参数长度可变指的是在调用函数时,传入的实参的值个数不固定

  4.1在形参中带“*”:会将调用函数时溢出的位置实参保存为元组的形式,然后赋值给*后的变量

def foo(x,y,*z):
print(x,y,z)
foo(1,2,3,4,5)#1 2 (3, 4, 5)

  4.2在形参中带“**”:会将调用函数时溢出的关键字实参保存成字典的形式,然后赋值给**后的变量名

def foo(x,y,**z):
print(x,y,z)
foo(1,2,a=1,b=2)#1 2 {'a': 1, 'b': 2}

  4.3在实参中带“*”:在传值前先被打散成位置实参,然后再进行赋值

def foo(x,y,*z):
print(x,y,z)
foo(1,*[2,3,4,5,6])#1 2 (3, 4, 5, 6)

  4.4在实参中带“**”:在传值前先被打散成关键字实参,然后再进行赋值

def foo(x,y,z):
print(x,y,z)
foo(1,**{'y':2,'z':1})#1 2 1

5.命名关键字参数

放到*与**之间的参数称为命名关键字参数。函数的调用者可以传入任意不受限制的关键字参数

注意:命名关键字参数必须按照key = value的形式传值

补充:

在形参中带*与**的,*后的变量名应该为args,**后应该是kwargs

# 当我们想要将传给一个函数的参数格式原封不动地转嫁给其内部的一个函数,应该使用下面这种格式
def bar(x,y,z):
print(x,y,z)
def wrapper(*args,**kwargs):
bar(*args,**kwargs)
wrapper(1,2,z=3) #虽然调用的是wrapper,但是要遵循的却是bar的参数标准

python-函数入门(一)的更多相关文章

  1. Python函数(入门6)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407970.html 本文出自:[Edwin博客园] Python函数 1. Python之调用函数 pri ...

  2. python函数入门

    知识内容: 1.函数的作用 2.函数的定义与调用 3.函数的返回值 4.函数的参数 5.局部变量与全局变量 6.作用域 一.函数的作用 1.复用代码 将可能重复执行的代码封装成函数,并在需要执行的地方 ...

  3. python函数入门到高级

    函数的定义: def test(x): "The function definitions" x+=1 return x def:定义函数的关键字 test:函数名 ():内可定义 ...

  4. Python——函数入门(三)

    一.变量作用域 当程序定义一个变量时,这个变量是有它的作用范围的,变量的作用范围称为变量的作用域.根据变量的位置,分为两种: 局部变量:局部变量就是在函数中定义的变量,包括参数,都是局部变量,局部离开 ...

  5. Python——函数入门(二)

    一.函数的参数 我们在定义函数时,可以定义形式参数(简称形参),这些形参的值在函数调用的时候才会确定,形参的值由调用者负责传入. 1.关键字参数 在Python中,函数的参数名并不是没有意义的,在调用 ...

  6. Python——函数入门(一)

    一.理解函数 举一个例子,当我们需要重复使用一个功能的时候,不可能每次都去复制一次代码,这个时候就需要用到函数了,所谓的函数,简单来说就是给函数取一个名字,当需要用到这个功能的时候,就可以通过这个名字 ...

  7. 实验与作业(Python)-02 Python函数入门与温度转换程序

    截止日期 实验目标 学会定义函数,使用函数.学会导入在某个文件中定义的函数. input获得值,然后通过eval或者int.float将其转换为相应的类型. 学会使用列表:访问列表.append.遍历 ...

  8. 实验与作业(Python)-02 Python函数入门与温度转换程序(函数、input、eval、int、float、列表)

    截止日期 实验目标 学会定义函数,使用函数.学会导入在某个文件中定义的函数. input获得值,然后通过eval或者int.float将其转换为相应的类型. 学会使用列表:访问列表.append.遍历 ...

  9. python之函数入门

    python之函数入门 一. 什么是函数 二. 函数定义, 函数名, 函数体以及函数的调用 三. 函数的返回值 四. 函数的参数 五.函数名->第一类对象 六.闭包 一,什么是函数 函数: 对代 ...

  10. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

随机推荐

  1. C# WinForm开发系列 - Crystal Report水晶报表

    转自:ttp://www.cnblogs.com/peterzb/archive/2009/07/11/1521325.html 水晶报表(Crystal Report)是业内最专业.功能最强的报表系 ...

  2. TensorFlow从入门到理解(三):你的第一个卷积神经网络(CNN)

    运行代码: from __future__ import print_function import tensorflow as tf from tensorflow.examples.tutoria ...

  3. vue 学习笔记—路由篇

    一.关于三种路由 动态路由 就是path:good/:ops    这种 用 $route.params接收 <router-link>是用来跳转  <router-view> ...

  4. shellb编程 之 实践出真知

    1.查询file1 里面空行的所在行号 纯空行:awk ‘{if($0~/^$/)print NR}’ file 空行和带空格,制表符等的行:awk '$0~/^\s*$/' file 2.查询fil ...

  5. Spring3.2+mybatis3.2+Struts2.3整合

    1.Spring3.2不能用于JDK1.8,只能用于JDK1.7.JDK1.8用spring4.0. 2.导入的jar包 3.目录结构: 4.配置Spring 配置数据库信息: <?xml ve ...

  6. 异常:已引发: "设置 connectionId 时引发了异常。" (System.Xaml.XamlObjectWriterException) 引发了一个 System.Xaml.XamlObjectWriterException: "

    项目中,引用一个富文本编辑器,SmithHtmlEditor,进入页面的时候异常. 在View和ViewModel所在的类库引用. 还需要在Main中引用.

  7. linux 工具学习网站

    推荐一个很不错的linux工具学习网站; 对于一个开发人员来说,我觉得掌握这些工具对于基于linux的应用开发来说事半功倍. http://linuxtools-rst.readthedocs.io/ ...

  8. CF1097D Makoto and a Blackboard

    题目地址:CF1097D Makoto and a Blackboard 首先考虑 \(n=p^c\) ( \(p\) 为质数)的情况,显然DP: 令 \(f_{i,j}\) 为第 \(i\) 次替换 ...

  9. HDOJ 1217 Arbitrage (最短路)

    题意:每两种货币之间都有不同的汇率  如果换回自己最后是赚的 输出Yes 否则是No 因为最多只有三十种货币 所以用Floyd是可行的 与一般的最短路板子不同的地方 汇率是要乘而不是加 如果乘上一个小 ...

  10. QML 从入门到放弃 第二卷

    第二卷如何更快速的放弃,注重的是C++和QML的交互 <1>记事本.. (1) 先测试下不在QML创建C++对象,仅仅在main.cpp添加一个属性函数供调用. 注意只使用槽函数来做到. ...