函数基础之定义,三种形式,返回值

函数基础

函数的定义

函数是一种思想。

在程序中,函数就是具备某一功能的功能,事先讲工具准备好就是函数的定义,遇到场景拿来就用就是函数的调用。

为何用函数

我们如果过不使用函数的话,写程序时将会遇到三个问题:

1.程序冗长

2.程序的扩展性差

3.程序的可读性差

如何使用函数

定义函数

先定义函数,后调用:

  • 定义函数
def 函数名(param1,param2....):
    """
    函数功能的描述信息
    :param1 描述
    :param2 描述
    :return  返回值
    code1
    code2
    code3
    """

    return   返回值
  • 调用函数

    函数名(param1、param2...)

注册功能

def register():
    # 注册功能
    username = input('username').strip()
    pwd = input('password').strip()

    with open('38a.txt','a',encoding='utf8') as fa:
        fa.write(f"{username}:{pwd}\n")
        fa.flush()

register()
# 复用
register()
register()

登录功能

def login():
    inp_username = input('username:').strip()
    inp_pwd = input('password:').strip()

    with open('38.txt','rt',encoding='utf8') as fr:
        for user_info in fr:
            user_info = user_info.strip('\n')
            user_info_list = user_info.split(':')
            if inp_username == user_info_list[0] and inp_pwd == user_info_list[1]:
                print('login succesdful')
                break

        else:
            print('failed')

login()

函数定义阶段

def func():
    bar()    # 不属于语法错误,不会报错
    print('*'*10)

只检测语法,不执行函数体代码

函数调用阶段

def bar():
    print('from bar')

def foo():
    print('from foo')
    bar()

foo()

from foo
from bar

def foo():
    print('from foo')
    bar()

def bar():
    print('from bar')

foo()

from foo
from bar

定义函数的三种形式

无参函数

定义函数时参数是函数体接受外部值的一种媒介,其实就是一个变量名

在函数阶段括号内没有参数,称为无参函数。需要注意的是:定义时午餐,意味着调用时也无需传入参数。

如果函数体代码逻辑不需要依赖外部传入的值,必须得定义无参函数。

def func():
    print('hello world')

func()   # hello world

有参函数

在函数定义阶段括号内有参数,称为有参函数。需要注意的是:定义时有参,以为着调用时也必须传入参数。

如果函数体代码逻辑需要依赖外部传入的值,必须得定义有参函数。

def sum_self (x,y):
    res = x + y
    print(res)  # 3
    sum_self(1,2)

空函数

当你只知道你需要实现某个功能,但还不知道该如何用代码实现时,就可以暂时写个空函数,然后先实现其他的功能。

def func():
    pass

函数的返回值

什么是返回值

函数内部代码经过一些逻辑处理获得的结果。

def func():
    name = 'shiqi'
    return name
name = func()
print(name)

shiqi

为什么要有返回值

  • return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就会执行。
  • return的返回值可以返回任意数据类型
  • return的返回值无个数限制,即可以使用使用逗号隔开返回多个值。

    ? 0个:返回None

    ? 1个:返回值是该值本身

    ? 多个:返回值是元组

    def max_self(salary_x,salary_y):
        if salary_x > salary_y:
            return salary_x
        else:
            return salary_y
    
    max_salary = max_self(20000,30000)
    print(max_salary*12)

    360000

    返回多个值:
    def func():
        name = 'shiqi'
        age = 17
        hobby_list = ['sing','junm','rap','basketball']
        return name,age,hobby_list
    
    name,age,hobby_list = func()
    print(f"i am {name},my age is{age},i like {hobby_list}")

    i am shiqi,my age is17,i like [‘sing‘, ‘junm‘, ‘rap‘, ‘basketball‘]

原文地址:https://www.cnblogs.com/shiqizz/p/11514999.html

时间: 2024-12-29 01:40:06

函数基础之定义,三种形式,返回值的相关文章

C++ 成员函数返回引用,三种获取返回值的效果

这个实验需要以下的代码: class Test { public: Test(){cout << "Test" << endl;} ~Test(){cout << "~Test" << endl;} Test(const Test &right) { cout << "Test(const)" << endl; this->a = right.a; } Test

文件内光标的移动 函数基础 定义函数的三种形式

# with open(r'a.txt', 'r', encoding='utf-8')as f:# data1=f.read()# print('>1>:',data1)# print(f.tell()) # 44 只有一种情况下,光标的意思是字符# data2=f.read()# print('>2>:',data2) # 第一次有结果,第二次没有,第一次读取数据后光标已经移到了文件尾 # 只有一种情况下,光标以字符为单位:文件以rt方式打开,read()# with open

第七章、函数基础之定义函数的三种方式03

目录 第七章.函数基础之定义函数的三种方式03 一.无参函数 二.有参函数 三.空函数 第七章.函数基础之定义函数的三种方式03 一.无参函数 定义函数时参数是函数体接收外部传值的一种媒介 在函数阶段括号没有参数就是无参函数.调用时不需要传入实参 如果函数体代码逻辑不需要依赖外部传入值,必须定义成无参函数 def func(): print('hello nick') func() # hello nick 二.有参函数 在函数阶段括号有参数就是有参函数.调用时需要传入实参 如果函数体代码逻辑需

Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)

QT通过三种形式提供了对线程的支持.它们分别是, 一.平台无关的线程类 二.线程安全的事件投递 三.跨线程的信号-槽连接. 这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势.多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应.在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的. 线程类 Qt 包含下面一些线程相关的类: QThread 提供了开始一个新线程的方法 QThreadStorage 提供逐线程数据存储

解梯度下降法的三种形式BGD、SGD以及MBGD

原帖地址:https://zhuanlan.zhihu.com/p/25765735           在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点. 下面我们以线性回归算法来对三种梯度下降法进行比较. 一般线性回归函数的假设函数为: $$h_\theta=\sum_{j=0}^n\theta_jx_j$$   对应的损失函数为: $$J_{train}(\theta)=\frac1{2m}\s

javascript oop编程 — 实现继承的三种形式

javascript  oop编程  - 实现继承的三种形式[1] (1)模拟类的方式, 我们都知道js是原型继承机制,不存在class和instance分离的这种方式 假设,我们有两个类 function  Animal(){ this.name = "animal"; this.eat = function(){ consle.log("eating"); } } function Cat(){ this.say = function(){ console.lo

a^b%c 的三种形式

求a^b%c,(1  <= a,b <= 2^62, 1 <= c <= 10^9) 最基本的快速幂 _LL mod_exp(_LL a, _LL b, int c) { _LL ans = 1; _LL t = a%c; while(b) { if(b&1) ans = ans*t%c; t = t*t%c; b >>= 1; } return ans; } 求a^b%c,(1 <= a,b,c <= 2^62) 因为c在long long范围内,

死锁的三种形式:一般死锁,嵌套管程锁死,重入锁死

死锁的总结 死锁的定义: 死锁一般是指两个(或两个以上)线程同时竞争两个(或者多个)资源,从而产生同时等待的现象,使得系统僵持不动. 顺便复习一下线程与进程的定义以及他们之间的区别. 进程:一个有独立功能的程序利用某些数据资源的一次远行过程. 线程:一个进程里面的一条执行路径(或者执行过程),同一条进程下的n多条线程之间可以互相通信(共享数据). 区别:进程是相对独立的单位,进程和线程的主要差别在于它们是不同的操作系统资源管理方式. 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进

Java基础---Java中无参数无返回值方法使用(三十六)

Java 中无参无返回值方法的使用 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名为 show ,没有参数,且没有返回值的方法,执行的操作为输出 " welcome to imooc. " 注意哦: 1. 方法体放在一对大括号中,实现特定的操作 2. 方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式 第二步,调用方法 当需要调用方法执行某个操作